Javascript 禁用时仍会发生嵌套更改事件

Javascript 禁用时仍会发生嵌套更改事件,javascript,events,Javascript,Events,我希望permissioncb\u change正在进行时,不要执行categorycb\u change功能,但它不起作用 在下面的代码中,当执行permissioncb_change时,我将fireCategoryEvents设置为false,但是由于某些原因,这并不阻止执行category_cb。当我调试时,我可以看到permissioncbu\u change是首先完成的,并且只有当它完成时才会触发执行categorycb\u change (重要提示:permissioncb_chan

我希望
permissioncb\u change
正在进行时,不要执行
categorycb\u change
功能,但它不起作用

在下面的代码中,当执行
permissioncb_change
时,我将
fireCategoryEvents
设置为
false
,但是由于某些原因,这并不阻止执行
category_cb
。当我调试时,我可以看到
permissioncbu\u change
是首先完成的,并且只有当它完成时才会触发执行
categorycb\u change

(重要提示:
permissioncb_change
功能中的
updategroup复选框中触发了
categorycb_change
。)

我也尝试过解绑和重新绑,但问题是一样的

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

.permissioncheckbox
.roleCegory
都是html输入复选框元素。
updateGroupCheckBox
后面的代码相当复杂。所以我认为在这里展示是没有用的。(它更改多个
.roleCegory
复选框的选中状态,从而触发
类别更改
事件)

解决方案

我找到了解决办法:

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

这样,在决定运行代码之前,我会检查事件的来源。

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

请显示您的HTML。另外,
updateGroupCheckboxes
code可能很有用……Olegas,代码太大,无法在这里发布,但我用一些额外的信息更新了问题。那里可能有一些异步操作(在
updateGroupCheckboxes
中)?一些AJAX调用?UpdateGroup复选框中没有AJAX或异步调用,只有jQuery DOM操作。Jared,我用解决方案更新了这个问题。我不再需要这些变量了。但是你是对的,名字很混乱。
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');
    }
}