0

ドロップダウン メニューが 10 個ほどあるフォームがあります。これらのドロップダウンのうち 2 つは他のドロップダウンとは異なります。ユーザーがこれらの各ドロップダウンで同じ値を持たないようにする方法を見つけようとしています。

例えば、

<select id="z_one">
   <option>1</option>
   <option>1</option>
   <option>1</option>
</select>

<select id="z_two">
   <option>1</option>
   <option>1</option>
   <option>1</option>
</select>

これらの 2 つの選択のみを反復処理し、他の選択を反復処理して、一致する値を確認する方法はありますか?

$('select[id^=z_]').change(function() {
   var value = $(this);
   $(this).siblings().each(function() { //this checks all siblings. do not want.
   if ($(this).val() == value.val()) {
      alert("You can't select the same value twice.");
      return false;
      }
   });
});

この jquery コードは、チェック対象の 2 つだけではなく、ページ上のすべての選択を反復処理します。これを行う方法はありますか?

4

3 に答える 3

1

兄弟への呼び出しである種の述語を試して、それらの 2 つの選択だけに制限してください。

何かのようなもの

this.siblings("[id = 'z_two']")

例えば。

于 2012-05-29T20:22:44.363 に答える
1

それ以外の

$(this).siblings().each(

使用する

$(this).next('select[id^=z_]').each(
于 2012-05-29T20:19:44.393 に答える
0

私はあなたのhtmlを少し変更しました。

<select id="z_one" class='groupA'>
   <option>Select an element</option>
   <option>1</option>
   <option>2</option>
   <option>3</option>
</select>

<select id="z_two" class="groupA">
   <option>Select an element</option>
   <option>1</option>
   <option>2</option>
   <option>3</option>
</select> 

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

$(function(){

    $('.groupA').change(function(){

        var currentID = this.id;
        var currentVal = $(this).val();

        var $options = $('option','.groupA');
        var $jThis = $(this);

        var isMatched = false;

        $.each($options,function(index,element){

            if(element.parentNode.id != currentID ){

                var $prevDropDown = $('#' + element.parentNode.id);

                if($prevDropDown.val() == currentVal){

                   $jThis.get(0).selectedIndex = 0;
                   alert("You can't select the same value twice.");
                   isMatched = true;
                   return false; // to break out from $.each
                }


            }
        });

        if(isMatched)
            return false;     
    });


});
于 2012-05-29T21:03:27.947 に答える