私は非常に単純な例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」が属性に値を割り当てない理由がわかりません。直接入力すると、 「値」属性に。
ところで: http: //blog.jquery.com/2011/05/12/jquery-1-6-1-released/で私は次を見つけました:
値の取得/設定に.attr()も.prop()も使用しないでください。代わりに.val()メソッドを使用してください(ただし、.attr( "value"、 "somevalue")を使用すると、1.6より前と同じように機能し続けます)。
彼らは「val」が属性を設定するべきだと言います...または私の英語は私がそれを正しく理解することを許可しませんか?
説明してください:)