1

いくつかのチェックボックスがあります。ユーザーがそれらのいずれかをチェックする場合、私は彼らがそれを行うことが許可されているかどうかを確認する必要があります。許可されていない場合は、通知してチェックを外します。ただし、これにより変更が再度トリガーされるため、ループが発生します。どうすればこれを乗り越えることができますか?

$('#step_1, #step_2, #step_3, #step_4').change(function(event) {
        if(!$('#section_2_active').attr('checked')){
            alert('You can not select output options when "Create Output" has not been selected.');

            $(this).attr('checked', false);

            $('#other_stages :checkbox:not(#section_2_active, #co_t)').change();
        }

});

このイベントに依存する別のプラグインがあるため、変更イベントのバインドを解除してから再バインドすることはできません。

他にどのようなオプションがありますか?各チェックボックスに関数呼び出しを添付することはできますが、もう少しエレガントなものを期待しています。そうでない場合は、デフォルトでこれを使用します。

助けてくれてありがとう

4

3 に答える 3

2

.trigger()ハンドラーに追加のパラメーターを渡すために使用できます。を使用しますloop。の場合は、次のfalseように、other-elementトリガーを再度実行しないでください。

$('#step_1, #step_2, #step_3, #step_4').change(function(event, loop) {
  if(!$('#section_2_active').attr('checked')){
    alert('You can not select output options when "Create Output" has not been selected.');
    $(this).attr('checked', false);
    if(loop !== false) 
      $('#other_stages :checkbox:not(#section_2_active, #co_t)').trigger('change', false);
  }
});
于 2010-10-19T14:44:30.420 に答える
0

最も単純な変更は次のようなものです。

var inClickHandler = false;

function OnChecked(evt) { 
  if (inClickHandler) {
    inClickHandler = false;
    return;
  }
  inClickHandler = true;

  // Do your stuff.
}
于 2010-10-19T14:41:33.057 に答える
0

なぜこの線を呼ぶのですか?$('#other_stages :checkbox:not(#section_2_active, #co_t)').change();私が見る限り、あなたはこれを必要とせず、それからループしません。event.preventDefault();チェックボックスは、使用しない限りチェックされ.attr('checked',false);、変更がトリガーされない場合があります。おそらく、問題が発生しているためです。

于 2010-10-19T14:47:31.210 に答える