質問

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

$('#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();
        }

});

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

他にどんなオプションがありますか?各チェックボックスに関数呼び出しを添付できますが、もう少しエレガントなものを望んでいます。

助けてくれてありがとう

役に立ちましたか?

解決

使用できます .trigger() ハンドラーに追加のパラメーターを渡すには、使用します loop. 。もし false, 、このように、他の要素トリガーをもう一度実行しないでください。

$('#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);
  }
});

他のヒント

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

var inClickHandler = false;

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

  // Do your stuff.
}

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top