0

我希望该categorycb_change功能在进行permissioncb_change中时不执行,但它不起作用。

在下面的代码中,我设置为何时fireCategoryEvents执行,但是由于某种原因,这并不能阻止执行。当我调试时,我可以看到它首先完成,只有当它完成执行时才会触发。falsepermissioncb_changecategory_cbpermissioncb_changecategorycb_change

(重要提示:在函数内categorycb_change触发。)updateGroupCheckboxespermissioncb_change

我也尝试过解除绑定和重新绑定,但同样的问题。

我做错了什么,或者我该如何解决这个问题?

.permissioncheckbox并且.rolecategory都是 html 输入复选框元素。后面的代码updateGroupCheckboxes相当复杂。所以我认为在这里展示没有用。(它改变了多个.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');
    }
}

这样我在决定运行代码之前检查事件的起源是什么。

4

1 回答 1

0

我用问题的解决方案更新了问题。

于 2013-07-19T06:29:46.707 回答