2

特定の値が選択されると、ページ上の他の 2 つの要素 (dt/dd ペア) を切り替えるフォーム選択要素があります。

イベントは正しくトリガーされますが、要素を切り替えることができません。ページ上のこれらの要素の「セット」の数が可変であるため、クラスセレクターを使用していることに注意してください。これが私のコードです:

$(".lender_id").change(function () {
if($(this).val()=='45')
   {
   $(this).next(".lender_other1").toggle();
   $(this).next(".lender_other2").toggle();
   }
});

Lender_id は私の select 要素クラスであり、次のような html コードです (この要素セットはページに複数回表示される可能性があります)。

<dt>Lender</dt>
<dd><select name="lender_id[1]" class="lender_id">
<option value="1">Value</option>
<option value="45">Special Value</option>
</select></dd>

<dt class="lender_other1" style="display:none;">Lender Name</dt>
<dd class="lender_other2" style="display:none;">
<input type="text" name="lender_other[1]" value="" /></dd>

<dt>Lender</dt>
<dd><select name="lender_id[2]" class="lender_id">
<option value="1">Value</option>
<option value="45">Special Value</option>
</select></dd>

<dt class="lender_other1" style="display:none;">Lender Name</dt>
<dd class="lender_other2" style="display:none;">
<input type="text" name="lender_other[2]" value="" /></dd>

etc...
4

4 に答える 4

2

next()あなたが思っていることをしません。試してみてください$(this).parent('dl').find('.lender_other1')。または、ほら、多分ただ$('.lender_other1').

于 2009-06-19T13:29:33.960 に答える
2

ここにあなたが望むものがあります:

$(".lender_id").change(function() {
    if ($(this).val() == '45') {
        $(this).parent().nextAll(".lender_other1:first, .lender_other2:first").toggle();
    };
});

編集

クラスセレクターを組み合わせて、より効率的にしました。

于 2009-06-19T14:53:01.093 に答える
1

. next() は次の一致のみを返すため、 . nextAll() を使用する必要があると思います

http://docs.jquery.com/Traversing/nextAll#expr

于 2009-06-19T13:56:06.573 に答える
0

slice(start, end)メソッドを使用します。これは john resig のビデオによると正しい方法です。

于 2009-06-19T14:50:13.190 に答える