質問するログイン新規登録
Ruby on Rails 5

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

1回答

614閲覧

jQueryにて条件に当てはまっていないif内にあるblurが発火してしまう

sakusakusaku10

総合スコア21

Ruby on Rails 5

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2022/02/26 07:05

0

0

前提・実現したいこと

railsにてjQueryを利用しています。
フォームが空白でフォーカスされてない時にform-activeクラスを付与しbackgroundを赤に変え
空白でフォーカスされている時と空白ではない時はform-activeクラスを削除するようにしたいです。

発生している問題・エラーメッセージ

更新後は上記の通り動いたのですが 一回バックスペースで全て削除した後再度入力しform-design以外をクリックするとform-activeが付与されてしまいます。 私の考えでは入力されているのでif文で弾かれremove及び「空白ではない」とconsoleに出る見込みなのですが layout.js:5 (記入されている文字)←form-designをクリック後 layout.js:17 空白ではない layout.js:12 空白かつフォーカスされてない←form-design以外をクリック後 layout.js:12 空白かつフォーカスされてない layout.js:12 空白かつフォーカスされてない layout.js:12 空白かつフォーカスされてない layout.js:12 空白かつフォーカスされてない layout.js:12 空白かつフォーカスされてない layout.js:12 空白かつフォーカスされてない となり、layout.js:5,:17で記入されているのを認識されているにも関わらず その後form-design以外をクリック後も5,17を期待しているのですが12が読み込まれます。

該当のソースコード

haml

1 2= form_with(url: xxx_path,method: :get, local: true)do |f| 3 = f.text_field :keyword, {class: "form-design form-active",required: true}

css

1.form-active{ 2 background: red; 3}

js

1$(function(){ 2 $(document).on('keyup click', '.form-design', function(e){ 3 e.preventDefault(); 4 var input = $(".form-design").val(); 5 console.log(input); 6 if(input == "") { 7 $(".form-design").on("focus",function(){ 8 $(this).removeClass("form-active"); 9 console.log("空白かつフォーカス中"); 10 }).on("blur",function(){ 11 $(this).addClass("form-active"); 12 console.log("空白かつフォーカスされてない"); 13 }); 14 } 15 else{ 16 $(this).removeClass("form-active"); 17 console.log("空白ではない"); 18 } 19 }); 20});

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

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

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

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

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

guest

回答1

0

ベストアンサー

イベントがonにされたままでoffになってないからでは。
ただ、イベントの付与のタイミングが現在の位置では微妙です。
クラスの付け外しを行うのでしたら、そのクラスがついてる要素に対するイベント付与で良い気がします。(つまりイベントの中でイベントということをしなくて良い)

動的になるのなら、documentからイベント監視したほうが良さそうです。
$(document).on(イベント,セレクタ,function(){})

投稿2022/02/26 07:29

m.ts10806

総合スコア80888

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

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

sakusakusaku10

2022/02/26 08:11 編集

ご回答ありがとうございます!! >>クラスの付け外しを行うのでしたら、そのクラスがついてる要素に対するイベント付与で良い気がします。(つまりイベントの中でイベントということをしなくて良い) 私の知識不足ゆえにここの部分が難解だったのですが、具体的におききしてもよろしいでしょうか。
m.ts10806

2022/02/26 08:36

コード見た感じ.form-activeを付け外しされてるようなので.form-activeをイベントトリガにするとかでしょうか。 $(document).on("focus",".form-design",function(){ ただぞもそもkeyup clickが付与されてる上にイベントが付与されるので、 元々のコードでも混線してそうにも思いますが。
sakusakusaku10

2022/02/27 06:44

$(function(){ $(document).off('keyup click','.form-design').on('keyup click', '.form-design', function(){ var input = $(".form-design").val(); console.log(input); $(document).off("blur",'.form-design').on("blur",".form-design",function(){ if (input == "") { $(this).addClass("form-active"); console.log("空白かつフォーカスされてない1"); // $('.form-design').off('keyup click blur') }else{ $(this).removeClass("form-active"); console.log("空白ではない1"); // $('.form-design').off('keyup click blur') } }); $(document).off("focus",'.form-design').on("focus",".form-design",function(){ if (input == "") { $(this).removeClass("form-active"); console.log("空白かつフォーカスされている"); // $('.form-design').off('keyup click focus') }else{ $(this).removeClass("form-active"); console.log("空白ではない2"); // $('.form-design').off('keyup click focus') } }) }); }); あってるか分かりませんがコメントを見て自分なりに考えてみました! すると思った通りの動きをしてくれました。 ご回答ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問