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

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

新規登録して質問してみよう
ただいま回答率
85.49%
JavaScript

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

jQuery

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

Q&A

解決済

3回答

871閲覧

動的にテキストが入力されるinputタグにクラスを付与したい

castail

総合スコア117

JavaScript

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

jQuery

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

0グッド

0クリップ

投稿2018/04/07 03:25

編集2018/04/07 03:56

動的にテキストが入力される「.input1,.input2」の2つのinputタグに「focus」クラスを付与したいです。
それぞれに直接フォーカスした場合の処理が実現できたのですが、

lang

1$(".input1,.input2").focus(function(){ 2 $(this).addClass("focus"); 3 }).blur(function(){ 4 if($(this).val() == ""){ 5$(this).removeClass("focus"); 6 }else{ 7 } 8 });

タグ自体を直接操作せずそのほか条件で動的にテキストが入力される場合(※)がありその場合の処理がわからない状態です。

※具体的には郵便番号「name=zip1,zip2」入力による住所欄の自動入力です。この郵便番号欄にはもちろん実在する郵便番号の数値を入力した時にしか自動反映されません。それ以外にも住所候補一覧「class="pref_list"」のaタグをクリックしても反映されます。

Jqueryでの実現方法をお教えください。

ご教授の程よろしくお願い致します。

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

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

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

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

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

defghi1977

2018/04/07 03:34

> 動的にテキストが入力される の部分が判りにくいです. もう少し状況を詳しく説明して下さい.
castail

2018/04/07 03:53

具体的には郵便番号「name=zip1,zip2」入力による住所欄の自動入力です。この郵便番号欄にはもちろん実在する郵便番号の数値を入力した時にしか自動反映されません。それ以外にも住所候補一覧「class="pref_list"」のaタグをクリックしても反映されます。
defghi1977

2018/04/07 04:23

要は, 「(手動・自動に関わらず)住所欄に入力が有った際に専用のスタイルを適用したい」ということですか?
castail

2018/04/07 04:28

はい、その通りです。ご説明が悪く申し訳ございません。
guest

回答3

0

このようなフォーカスをもっているノードに対するスタイル付けはスクリプトでやるより:focus擬似クラスを用いるのが常道です.

https://developer.mozilla.org/ja/docs/Web/CSS/:focus

CSS

1input:focus{ 2 background-color:yellow; 3}

NOTE:
と解釈しましたが如何でしょうか?


input要素の入力状態によってスタイルを切り替えたいとのことでしたので, input要素の入力内容を監視し, その内容によってクラスを付け替えるようにしてみました.

NOTE:
本来このような動作を単純化するためにCSSが存在するのですが, うまく要件に合致する擬似クラスを見つけることが出来ませんでした.

HTML

1<input id="address"/>

CSS

1input{ 2 background-color: white; 3} 4input.inputted{ 5 background-color: yellow; 6}

JavaScript

1"use strict"; 2{ 3 (function observe(){ 4 address.classList[address.value == "" ? "remove" : "add"]("inputted"); 5 requestAnimationFrame(observe); 6 })(); 7}

投稿2018/04/07 03:32

編集2018/04/07 04:53
defghi1977

総合スコア4756

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

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

castail

2018/04/07 06:40

ご回答ありがとうございます。 こちらの記述を試したのですが、うまく動作しない状態です。 こちらの記述ミス含め検証したいと思います。 ただ、今回は別の方の記述で実現できましたので、ベストアンサーはその方とさせて頂きます。悪しからず、ご了承ください。
guest

0

ベストアンサー

js

1Object.defineProperty(target, 'value',{ 2 get : function(){return Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value').get.call(target)}, 3 set : function(x){ 4 console.log(x); 5 Object.getOwnPropertyDescriptor( HTMLInputElement.prototype, 'value' ).set.call( target, x ); 6 } 7})

HTMLInputElement.value を監視する - Qiita
みたいなのはいかがでしょう?

コメントを受けて追記

jQueryでの動作サンプル

js

1//元コード 2$(".input1,.input2").focus(function(){ 3 $(this).addClass("focus"); 4 }).blur(function(){ 5 if($(this).val() == ""){ 6$(this).removeClass("focus"); 7 }else{ 8 } 9 }); 10 11//想定外部スクリプト 12$('div').on('click', function(){ 13 $(".input1,.input2").val(100); 14}); 15 16//input監視関数 17var observer = function(_, target){ 18 Object.defineProperty(target, 'value',{ 19 get : function(){return Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value').get.call(target)}, 20 set : function(x){ 21 $(target).focus(); 22 Object.getOwnPropertyDescriptor( HTMLInputElement.prototype, 'value' ).set.call( target, x ); 23 } 24 }); 25}; 26 27//.each()メソッドで監視関数を呼ぶ 28$(".input1,.input2").each( observer );

html

1<input class="input1"> 2<input class="input2"> 3<div>pref_list</div>

css

1.focus{ 2 border:solid 1px red; 3}

投稿2018/04/07 03:29

編集2018/04/07 04:42
Lhankor_Mhy

総合スコア36072

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

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

castail

2018/04/07 03:54

ご回答ありがとうございます。 事後の条件提示で大変恐縮ですが、jqueryでの実現方法をご教授いただけますでしょうか?
Lhankor_Mhy

2018/04/07 04:05

jQuery でも問題なく動作するはずです。 ご不明の点があればお知らせください。
Lhankor_Mhy

2018/04/07 04:37

jQuery での動作サンプルを追記しました。 ご不明の点があればお知らせください。
castail

2018/04/07 06:39

ご回答ありがとうございます。 ご教授頂いた内容で実現できました! 感謝いたします。
guest

0

jQueryのtrigger()メソッドでカスタムイベントを発火させてあげれば良いのでは?

https://codepen.io/anon/pen/wmQJbL

HTML

1<input id='textbox' type='text' value='' /> 2<button id='addButton'>Add</button> 3<button id='removeButton'>Remove</button> 4

CSS

1.focus { 2 background-color: #FBFDC7; 3}

JavaScript

1var $textbox = $('#textbox'); 2var $addButton = $('#addButton'); 3var $removeButton = $('#removeButton'); 4 5$addButton.on('click', function() { 6 $textbox.val('東京都'); 7}); 8 9$removeButton.on('click', function() { 10 $textbox.removeClass('focus'); 11}); 12 13var originalVal = $textbox.val.bind($textbox); 14 15Object.defineProperty( 16 $textbox, 17 "val", 18 { 19 value: function (v) { 20 originalVal(v) 21 $(this).trigger("auto-filled"); 22 } 23 } 24); 25 26$textbox.on("auto-filled", function (event) { 27 $(this).addClass("focus") 28});

追記

いや、なんかあやしいので気にしないでください。

投稿2018/04/07 06:51

編集2018/04/07 07:04
HayatoKamono

総合スコア2415

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問