質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

2回答

591閲覧

フロントで入力チェックしたい

Sibutakiti

総合スコア18

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2020/07/21 16:07

Railsでイベント管理システムを作成していて、javaScriptを使用してフロント上で開始時間と終了時間の逆転や
開始時間と終了時間どちらか入力されてないものにバリテーションをかけよう思ってますがうまくいきません。
(後者 両方ともブランクはOKなのでrequireでチェックをかけるのは不可)
jsで検索かけたらformのname名をつけてjsでチェックする方法はあるようですが残念ながらform_withにname名を
つけることはできないと思われます。
いい方法がないか教えて頂きたくお願いします。
該当のview内のフォームです。

rails(view)/ruby

1<%= form_with(model: @event, url: events_path, local: true, method: :post) do |f| %> 2 <tr> 3 <th>イベント名</th> 4 <td><%= f.name_field :name , class: "form-control", required: true %></td> 5 </tr> 6 7 <tr> 8 <th>開始時間</th> 9 <td><%= f.time_field :start_time , class: "form-control" %></td> 10 </tr> 11 12 <th>終了時間</th> 13 <td><%= f.time_field :finish_time , class: "form-control" %></td> 14 </tr> 15<% end %>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/07/21 20:09

自身でJavaScriptは書かれてないのでしょうか。nameが無理という根拠が乏しいですがidつければ良いのでは
Sibutakiti

2020/07/25 07:53 編集

確かにidでもとれました。失礼しました。 結局、jQueryでバリテーション組みました form_with のidをevent_newに設定 ボタンの上に<div id="warning"></div>タグを書いた 勿論、アプリにjQueryインストール済 <script> $("#event_new").submit('turbolinks:request-start', function() { var start = $("input[name='event[start_time]']").val(); var finish = $("input[name='student[finish_time]']").val(); if (start > finish) { $("#warning").text("時間の入力に誤りがあります。確認して再登録お願いします。"); return false; } else { $("#event_new").submit(); } }); </script>
guest

回答2

0

残念ながらform_withにname名を

つけることはできないと思われます。

いえ、最初からnameがついているかと思いますので、それを拾う形にすればいいのではないでしょうか?(もちろん、自分で別途idを振ることも可能です)

投稿2020/07/21 22:37

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Sibutakiti

2020/07/25 07:49

数件の回答頂いてました。気がつかず申し訳けございません。ありがとうございました。今後ともよろしくお願いします。
guest

0

nameのついていないinput要素はバリデートしてもしなくても
postされないので意味がない命題だと思います

投稿2020/07/22 00:54

yambejp

総合スコア114812

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2020/07/22 00:56

とりあえずHTMLベースで <script> window.addEventListener('DOMContentLoaded', ()=>{ const from=document.querySelector('[name=from]'); const to=document.querySelector('[name=to]'); const times=[from,to]; times.forEach(x=>{ x.addEventListener('input',()=>{ var flg=[...times].filter(x=>x.value=="").length<=1; times.forEach(y=>y.required=flg); if(x==from) to.setAttribute('min',x.value); if(x==to) from.setAttribute('max',x.value); }); }); }); </script> <form> from:<input type="time" name="from"><br> to:<input type="time" name="to"><br> <input type="submit" value="check"> </form>
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問