4

私は非常に単純な例jsfiddleを持っています:

HTML:

<input type="text"/>
<input type="text" value="aaa"/>

JS:

$("input:first").val("aaa");
alert($("input[value='aaa']").length);​

ChromeとIEが異なる結果を返すのはなぜですか?ChromeのjQueryがjQueryを使用して設定されたときに「値」を認識しないのはなぜですか?
どうすれば解決できますか?ChromeがIEとまったく同じ結果を返す必要があります。

編集:私は私の答えを受け入れませんでした、なぜならそれについて少し考えた後、私はまだいくつかのことを理解していません(多分私はいくつかの部分に関して間違っています):

1)ご存知のように、ブラウザによってテキストボックスに表示されるテキストは、常に「値」属性である必要があります。フォームを送信すると、テキストボックスやその他の入力フィールドに表示される「値」がサーバーに送信されるためです(そうでない場合)。無効)。

2)したがって、テキストボックスに表示されたテキストを送信するために「value」に保存する必要がある場合$("input[type='text']").val("aaa")、後で送信される可能性があるため、テキスト「aaa」を「value」属性に割り当てるのは自然なことです。もしそうなら、$("input[value='aaa']")それを手に入れてみませんか?

3)他のこと.... jQueryの「val」メソッドを使用せず、代わりにテキストをテキストボックスに直接入力すると、「value」属性に移動しませんか?「val」を使用してテキストをテキストボックスに割り当てない別の例を作成しました。テキストボックスに直接入力してから、$("input[value='aaa']")再度取得することはありません。

私にとっては非常に奇妙です...プロパティと属性の違いは理解していますが、HTMLフォームの性質上、「val」が属性に値を割り当てない理由がわかりません。直接入力すると、 「値」属性に。

jsfiddleを更新しました

ところで: http: //blog.jquery.com/2011/05/12/jquery-1-6-1-released/で私は次を見つけました:

値の取得/設定に.attr()も.prop()も使用しないでください。代わりに.val()メソッドを使用してください(ただし、.attr( "value"、 "somevalue")を使用すると、1.6より前と同じように機能し続けます)。

彼らは「val」が属性を設定するべきだと言います...または私の英語は私がそれを正しく理解することを許可しませんか?

説明してください:)

4

2 に答える 2

8

プロパティを設定しているからだと思います。次に、を使用して、実際には変更されていないの属性を確認します。入力の値を次のように設定するために使用する方法を変更した場合:.valinput[value="aaa"]inputjQuery

$("input:first").attr("value", "aaa");

そして、長さ確認すると、期待どおりの結果が得られます。

フィドル: http: //jsfiddle.net/gromer/ZnbpE/

プロパティと属性の違い:http: //blog.jquery.com/2011/05/12/jquery-1-6-1-released

于 2012-10-02T16:46:17.217 に答える
2

質問が非常に長いため、この回答も少し長くなります: 最初に:このfiddle で理解したように、属性セレクター input[anyAttribute] の動作には一貫性がありません: while input[value] は一致するだけです実際の属性、input[maxlength] はプロパティにも一致します (最近の FF、最近の Chrome、IE 9 でテスト済み)。

属性とプロパティの違いを理解するには、http: //blog.jquery.com/2011/05/12/jquery-1-6-1-releasedを参照してください。

つまり、何かが入力された後に特定の値を持つすべての要素を取得するには、通常、input[value='anything'] を使用できません。jQuery.val() もフックの下で .value プロパティを使用するため、これは jQuery を使用する場合にも当てはまります。それを示す別のフィドル。(ステータスのクリックは、何かが入力された後に情報を取得するために使用できます)。

あなたが言及した別のポイントは、要素の値を設定するには .val() のみを使用することをお勧めします。ほとんどのバグとさまざまな実装を処理するため、これは完全に真実です。したがって、 .attr('value') または .prop('value') は、めったにない状況でいくつかの問題を引き起こす可能性があります。

一部の IE が実際に .value プロパティの input[value='aaa'] に一致することは、IE .querySelectorAll 実装のバグ (または機能) であるか、Sizzle のバグ (または機能) である可能性があります。属性セレクターがありません。それを確認するには、お使いの IE のバージョンでセレクター フィドルを実行するだけです。私は 9 よりも古いバージョンの IE をインストールしていません (Windows 7 では IE のバージョンがアップグレードされるため)。

最後に: 特定の値を持つすべての入力フィールドが本当に必要な場合は、フィルター関数でjQuery.filterを使用して、正しい .val を確認します。

于 2012-10-03T11:16:39.530 に答える