jQuery .valの変更は入力値を変更しません


103

値にリンクがあるHTML入力があります。

<input type = 'text' value = 'http://www.link.com' id = 'link' />

特定のイベントで値を変更するためにjQueryを使用しています。

$('#link').val('new value');

上記のコードはテキストボックスの値を変更しますが、コードの値は変更しません(値= 'http://www.link.com'は変更されません)。変更するには、値= ''も必要です。


どういう意味in the codeですか?ページの元の(したがって、変更されていない)ソースを見ていますか?
フレデリックハミディ2012

Chromeのinspect要素を使用します。
Lukas

3
@Luke値は変更されますが、ChromeのインスペクターでのHTML要素の表示値は変更されません。値を警告するか、コンソールに出力してみてください。値が変更されたことがわかります。参照してください:jsfiddle.net/a8SxF
TheZ

はい、わかりました。zClipを使用して値をクリップボードにコピーしていますが、変更後に古い値をコピーしています。少しいじって修正できると思います。
ルカス

回答:


177

attr代わりに使用してください。
$('#link').attr('value', 'new value');

デモ


6
これは完全に正しいです。setAttributeまたはjQuery を使用attrすると、DOM要素の値にも影響します:jsfiddle.net/a8SxF/1
TheZ

4
@TheZは、入力のダーティバリューフラグがfalseであるためです。入力(ユーザーの入力後に値がダーティ)を操作してから、setAttribute
Esailija

5
しかし、でhtmlを取得したい.html()場合、.val('new value')またはattr('value', 'new value')... を使用しても問題はありませんが、同じ古い値が残ります:(
Legionar

6
.valを使用して大量の複雑な関数の束をコード化し(以前に読んだすべてで示唆されているように)、これとまったく同じ問題がありました。血まみれ迷惑!この回答は、フォーム要素を動的に更新しようとしているjQuery初心者にとって、最初の呼び出しポイントになるはずです。これを最初に読んだら、私はかなりの数時間を節約できただろう!
Grant

2
これが、JavaScript / JQueryで実行するのが難しい理由です。このような多くの警告があります。これは私を大いに助けました。ありがとうございました!
eaglei22

13

valueプロパティを変更しても、は変更されませんdefaultValue。コード(.html()またはで取得innerHTML)では、value属性にはdefaultValuevalueプロパティではなくが含まれます。


1
なるほどね。入力しても<input id = 'a' value>は変更されませんが、$( "#a")。val()の結果には影響します。念のための質問:$( "#a")。val(value)は、正しい値が送信されるように入力要素の値を変更する正しい方法ですか?
Daniel Katz

1
はい、そうです。属性を変更しても、送信される内容は変わりません。
Kevin B

8

リカルドの答えを少し拡張する:https : //stackoverflow.com/a/11873775/7672426

http://api.jquery.com/val/#val2

val()について

このメソッドを使用して(またはネイティブのvalueプロパティを使用して)値を設定しても、changeイベントは送出されません。このため、関連するイベントハンドラーは実行されません。それらを実行したい場合は、値を設定した後に.trigger( "change")を呼び出す必要があります。


2

これは、私に起こった可能性のあるシナリオにすぎません。まあそれが誰かを助けるなら素晴らしい:私は複雑なアプリを書きましたが、コードのどこかに、関数を使用してすべてのテキストボックスの値をクリアしてから表示しました。しばらくして、jquery val( 'value')を使用してテキストボックスの値を設定しようとしましたが、その直後にClearAllInputsメソッドを呼び出したことに気付かなかったので、これも発生する可能性があります。


0

同様の問題は、セレクターに特殊文字(ピリオドなど)が含まれていることが原因でした。

修正は、特殊文字をエスケープすることでした:

$("#dots\\.er\\.bad").val("mmmk");

非常に悪いことに同意します。エスケープしてはならず、要素のIDの名前を変更する必要があります。
webaholik

-1
<script src="//code.jquery.com/jquery.min.js"></script>
<script>
function changes() {
$('#link').val('new value');
}
</script>
<button onclick="changes()">a</button>
<input type='text' value='http://www.link.com' id='link'>

1
ええ、これは実際の値を更新しません。画面上のテキストボックスを更新しますが、フォームを送信しようとしたときの値は、ページが最初に読み込まれたときの値です。
Grant

-1

私にとっての問題は、このフィールドの値の変更が機能しないことでした:

$('#cardNumber').val(maskNumber);

上記の解決策はどれもうまくいかなかったので、さらに調査したところ、次のことがわかりました。

DOMレベル2のイベント仕様によれば、変更イベントは、コントロールが入力フォーカスを失い、フォーカスを得てからその値が変更されたときに発生します。つまり、変更イベントは、ユーザーの操作による変更時に発生するように設計されています。プログラムによる変更では、このイベントは発生しません。

解決策は、トリガー関数を追加して、次のように変更イベントをトリガーすることです。

$('#cardNumber').val(maskNumber).trigger('change');

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.