0

私が持っているものをちょっと説明する簡単なフィドルを作成しました(機能しません)。一連の選択があり、さらに追加する可能性があります。現在、これらはオブジェクトの配列に基づいて動的に設定されます。私がやりたいことは、選択したオプションが使用されている場合、同じオプションを使用しないことです。たとえば、select-1オプション 1-2-3-5 が としてありますselect-2が、ユーザーが 1 つのオプションを選択すると、動的に作成されたオプションだけでなく、他の選択でもそのオプションを非表示にする必要があります。これらも可逆的でなければなりません。ご助力いただきありがとうございます。フィドル

4

1 に答える 1

1

セレクターを使用して、このコードをいくらか簡略化しました。

ここでは、イベントを1つだけ持つ必要があり、セレクター(または別の複数一致セレクター)でコンマを使用して、必要なものすべてにヒットさせることができます。

    $('#xAxis,#yAxis').on('change',function(){
        setControls();
        $('#main-controls select')
          .each(function()
          {
               $('#main-controls select')
                 .not($(this))
                 .find('option[value=' + $(this).val() +']')
                 .remove();
          });
    });

戦略は、コントロールを設定してから、選択したものを持つ他のコントロールを見つけることです。オプションがあればこれははるかに簡単ですhide()が、残念ながらクロスブラウザでは機能しません。私たちはremove()彼らにしなければなりません。

変更ではsetControls、オプションがまだない選択にのみオプションを追加します。そうすれば、(現在の選択を失うことなく)選択を元の選択に戻したいときはいつでもそれを呼び出すことができます。

    function setControls(){
        $.each(series,function(k,v){
            $('#xAxis,#yAxis')
              .filter(':not(:has(option[value=' + k +']))')
              .append($('<option>')
              .attr({value: k})
              .text(v.name));
        });   
    }

http://jsfiddle.net/5YhpW/8/

于 2013-02-27T05:32:24.423 に答える