我希望在categorycb_change
正在进行时不执行permissioncb_change
函数,但它不起作用。
在下面的代码中,当fireCategoryEvents
正在执行时,我将false
设置为permissioncb_change
,但由于某种原因,这不会阻止category_cb
执行。当我调试时,我可以看到permissioncb_change
首先完成,只有当它完成后才会执行categorycb_change
。
(重要提示:categorycb_change
在updateGroupCheckboxes
功能中permissioncb_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');
}
}
这样我在决定运行代码之前会检查事件的起源。
答案 0 :(得分:0)
我用问题的解决方案更新了问题。