0

したがってdiv、フィールド(input[type=text])を含むこれがあり、このdivのコンテンツのコピーを作成し、そのコピーをユーザーに表示して値を編集しています。彼らがコピーの値を更新すると、それが送信され、元の値が変更されます。

問題は、コピーを削除して非表示のdivから新しいコピーを再度作成すると、新しいコピーのフィールドに表示されるテキストが元のテキスト(ページが読み込まれたとき)であり、更新された新しいテキストではないことです。元のフィールドにはその中の新しいテキストが表示されます、その要素を調べると、value属性に古いテキストが表示されます。

言い換えれば、コピーに表示されるテキストとオリジナルのvalue属性を除いて、すべてが正しいということです。

だから私は何か間違ったことをしているのか、それとも何らかの回避策があるのだろうかと思っています。

コード例は次のとおりです。

<div style="display:none">
    <input type="text" value="test" />
    <a>Submit</a>
</div>
<button class="get">Get value</button>
<button class="show">Show hidden one</button>
<button class="copy">Copy hidden one</button>​
$('button.copy').click(function(){
    $('<br><span>'+$('div').html()+'</span>').appendTo('body');
});

$('a').live('click',function(){
    $('div input').val($('span input').val());
    $('span').remove();
});

$('button.get').click(function(){
    alert($('div input').val());
});

$('button.show').click(function(){
    $('div').show();
});

私のjsFiddle

4

1 に答える 1

2

.val()はvalue属性を更新しないため、.html()要素を更新または検査すると、値ではなく元のhtmlが表示されます。上記のコードの1行を次のように変更した場合:

$('div input').attr("value", $('span input').val());

期待どおりに機能するはずです。.data()でデータ属性を設定して.dataから取得しようとすると、同様の問題が発生します。.attr("data-

于 2012-07-27T21:09:55.270 に答える