かなり驚いたので初めて記事を書きます。
だめな例
"aaa"と入力されたinput要素のvalue属性を表示するプログラムのつもり。(つまり"aaa"が返ってくるはず)
<input type="text" name="phrase">
const check = () =>{
const target = $('input[value="aaa"]');
console.log(target.val());
}
"aaa"と入力して、consoleでcheck();
を呼び出すと当然"aaa"...ではなくundefined
原因
どうやらこちらによると、
If you are changing value dynamically it wouldn't get selected by attribute selector.
この属性セレクタはユーザーによって動的に変更された値に対しては使えないそうです。1
Attribute selector will not check the dom node's value property it only targets the element's attribute
この属性セレクタは、その要素の属性のみを対象とし、ノードのvalueプロパティはチェックされません。1
解決策
filterを使いましょう。2
<input type="text" name="phrase">
const check = () =>{
const target = $('input').filter(function() {
return this.value == "aaa"
});
console.log(target.val());
}
"aaa"と入力して、consoleでcheck();
を呼び出すと..."aaa"!!
参考
javascript - Why Jquery selector by 'value' not work in case of dynamic change - Stack Overflow