禁用时,嵌套更改事件仍会发生
Nested change event still happens when disabled
我希望categorycb_change
函数在进行时不执行permissioncb_change
,但它不起作用。
在下面的代码中,我将fireCategoryEvents
设置为 false
何时执行permissioncb_change
,但是由于某种原因,这不会阻止category_cb
执行。当我调试时,我可以看到permissioncb_change
首先完成,并且只有在完成执行时才会触发categorycb_change
。
(重要说明:categorycb_change
在permissioncb_change
函数内updateGroupCheckboxes
触发。
我也尝试了取消绑定和重新绑定,但同样的问题。
我做错了什么,或者我该如何解决这个问题?
.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');
}
}
这样,我在决定运行代码之前检查事件的起源。
相关文章:
- Javascript嵌套事件
- 反应:在嵌套组件上冒泡点击事件
- jQuery从嵌套函数中获取触发事件的元素的id
- 为什么 DOM 事件处理程序中的嵌套函数会修复“this”绑定
- 事件委派模式,在按钮中使用 addEventListener 和嵌套元素
- 从嵌套函数中选择事件目标
- 嵌套事件在Javascript/JQuery中是一种很好的实践吗?
- 你能嵌套在点击事件上吗?
- 如何防止嵌套列表的点击事件
- 单击嵌套在按钮中的元素的事件
- 当 .on 事件位于嵌套函数中时,Jquery 事件冒泡
- 嵌套 Javascript 自定义事件
- 在嵌套循环中创建事件处理程序的效率:我在这里创建了 1440 个函数
- 多个页面之前创建由使用 jsfiddle 的嵌套列表视图引起的事件
- 我可以嵌套多深的骨干更改事件
- Material-ui:如何在嵌套组件中停止单击事件的传播
- 嵌套事件触发器
- 如何在结束加载嵌套的html页面(对象中的页面)后激发事件
- 嵌套视图:使用适当的ui绑定事件
- 防止嵌套元素触发父元素的事件