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