13

私は次のhtmlを持っています:

<div class="copy_me_text">
    <div>
        <input type="text" name="name" />
        <input type="hidden" name="id" />
    </div>
</div>

<div class="copy_me_hidden">
    <div>
        <input type="hidden" name="name" />
        <input type="hidden" name="id" />
    </div>
</div>

そして次のjsコード:

var $cloned_text = $('.copy_me_text').clone();
$cloned_text.find('input[name="name"]').val("SOMETHING");
$cloned_text.find('input[name="id"]').val("SOMETHING");
console.log($cloned_text.html());

var $cloned_hidden = $('.copy_me_hidden').clone();
$cloned_hidden.find('input[name="name"]').val("SOMETHING");
$cloned_hidden.find('input[name="id"]').val("SOMETHING");
console.log($cloned_hidden.html());

そして、出力は私にとって奇妙です:

<div>
    <input name="name" type="text">
    <input value="SOMETHING" name="id" type="hidden">
</div>
<div>
    <input value="SOMETHING" name="name" type="hidden">
    <input value="SOMETHING" name="id" type="hidden">
</div>

jsFiddle のも作成します。それは正しい行動ですか?.html()関数で値が返されない理由がわかりませんinput type="text"

4

5 に答える 5

8
于 2013-01-21T15:02:24.720 に答える
6

それは確かにjQueryのバグのように見えます。attr()次の関数を使用して、強制的に戻すことができます。

$cloned_text.find('input[name="name"]').attr('value', "SOMETHING");

更新されたフィドルを見る

于 2013-01-21T14:01:55.633 に答える
3

このhtml()関数は、要素に割り当てられたhtmlを返します。あなたの場合、入力テキストフィールドに値を割り当てています。

これを試して

$cloned_text.find('input[name="name"]').attr('value', "SOMETHING");
于 2013-01-21T14:02:37.967 に答える
2

これは jQuery のバグではありません。

メソッドの jQuery ソース コードでvalわかるように、それらは単に要素の を設定しているだけvalueであり、input要素に新しい属性を追加することとは異なります (最終的にvalueプロパティが変更されます)。

jQuery ソース (hooksこのコンテキストでは null です):

if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
    this.value = val;
}

したがって、何を取得するvalには、要素に新しい属性を追加する必要があります。

.attr('value', "SOMETHING");

他の人が述べたように。

.attr新しい属性を使用すると、要素に追加され、.html文字列として返されます。

于 2013-01-21T14:19:15.617 に答える
1

この問題の適切な回避策は、 のattr()代わりに 関数を使用することval()です。

だから、代わりに

$cloned_text.find('input[name="name"]').val("SOMETHING");

書く

$cloned_text.find('input[name="name"]').attr("value", "SOMETHING");
于 2013-01-21T14:07:00.203 に答える