進行中にcategorycb_change関数を実行しないようにしたいのですが、機能しません。permissioncb_change
以下のコードでは、実行時に設定fireCategoryEventsしていますが、何らかの理由で実行を妨げません。デバッグすると、それが最初に実行され、実行が完了したときにのみ起動されることがわかります。falsepermissioncb_changecategory_cbpermissioncb_changecategorycb_change
(重要な注意:関数内でcategorycb_changeトリガーされます。)updateGroupCheckboxespermissioncb_change
バインド解除と再バインドでもこれを試しましたが、同じ問題です。
私は何を間違っていますか、またはどうすればこれを修正できますか?
.permissioncheckboxと.rolecategoryは両方とも html 入力チェックボックス要素です。コードビハインドupdateGroupCheckboxesは非常に複雑です。したがって、ここで表示することは役に立たないと思います。(複数のチェックボックスのcheckedstateを変更して.rolecategory、イベントをトリガーしcategorycb_changeます)
var fireCategoryEvents = true;
$(function () {
$('.permissioncheckbox').change(permissioncb_change, 0);
$('.rolecategory').change(categorycb_change);
});
function permissioncb_change() {
fireCategoryEvents = false;
$(this).attr('data-changed', true);
if (firePermissionEvents) {
updateGroupCheckboxes(this);
}
fireCategoryEvents = true;
}
function categorycb_change() {
if (fireCategoryEvents) {
alert('cat changed');
}
}
解決
私は解決策を見つけました:
function permissioncb_change() {
$(this).attr('data-changed', true);
if (arguments[0].originalEvent.srcElement.className != 'rolecategory') {
updateGroupCheckboxes(this);
alert('per changed');
}
}
function categorycb_change() {
if (arguments[0].originalEvent.srcElement.className != 'permissioncheckbox') {
alert('cat changed');
}
}
このようにして、コードの実行を決定する前に、イベントの発生源を確認します。