1

ご挨拶、

可変数の入力を持つフォームがあり、その単純化されたバージョンは次のようになります。

<form>
<label for="same">all the same as first?</label>
<input id="same" name="same" type="checkbox" />
<input type="text" id="foo[1]" name="foo[1]" value="" />
<input type="text" id="foo[2]" name="foo[2]" value="" />
<input type="text" id="foo[3]" name="foo[3]" value="" />
<input type="text" id="foo[4]" name="foo[4]" value="" />
<input type="text" id="foo[5]" name="foo[5]" value="" />
</form>

#same チェックボックスをオンにして、jQuery に #foo[1] の値を #foo[2]、#foo[3] などにコピーさせるという考え方です。#same がオフの場合もクリアする必要があります。

フォームの前の段階からの入力に基づいて、任意の数の #foo 入力が存在する可能性があり、このビットが問題を引き起こしています。明らかな何かが欠けていると確信していますが、動作するバリエーションを得ることができません$('#dest').val($('#source').val());

ヘルプ!

4

3 に答える 3

3

jQuery にはand$('#foo[1]')が含まれているため、id による選択に失敗するため、最初の要素を として選択しています。次に、次のすべてのテキスト ボックスを取得し、id 属性が一致しない場合はそれらを除外し、最初の値と同じ値を適用するか、チェックボックスの状態に応じてそれらをクリアします。[]$('[id=foo[1]]')foo[<digits>]

$("#same").click(function() {
    var first = $('[id=foo[1]]');
    var next = first.nextAll(':text').filter(function() {
        return /foo\[\d+\]/.test(this.id);
    });
    if($(this).is(':checked')) {
        next.val(first.val());
    }
    else {
        next.val('');
    }   
});​

firstこれは機能しますが、やなどのクラスをrestHTML に追加する方が簡単かもしれません。

<input id="same" name="same" type="checkbox" />
<input type="text" id="foo[1]" name="foo[1]" class="first" value="" />
<input type="text" id="foo[2]" name="foo[2]" class="rest" value="" />
<input type="text" id="foo[3]" name="foo[3]" class="rest" value="" />
<input type="text" id="foo[4]" name="foo[4]" class="rest" value="" />
<input type="text" id="foo[5]" name="foo[5]" class="rest" value="" />

jQuery コードは次のように簡略化されます。

$("#same").click(function() {
    if($(this).is(':checked')) {
        $('.rest').val($('.first').val());
    }
    else {
        $('.rest').val('');
    }   
});​
于 2010-04-13T01:20:59.313 に答える
2
    $("input#same").click(function(){
      var checkBox = $(this);
       if (checkBox.attr("checked")){
         $("form input[name^=foo]").val($("input[name^=foo]:first").val());
        }else{
          $("form input[name^=foo]:not(:first)").val("");
        }
    }); 

編集: このコードは、名前が文字列fooで始まる入力要素にのみ適用されます

于 2010-04-13T01:09:12.287 に答える
2

おそらくこのようなものですか?

http://jsbin.com/anone3/2/edit

于 2010-04-13T01:58:26.083 に答える