页面加载后,我设置所有锚点都应该使用插件jquery-blockui来阻止屏幕,以防止不耐烦的用户多次点击并避免不必要的多次请求到服务器。
$("a").on("click", $.blockUI);
我也在使用jquery ui multiselect widget,这个小部件使用锚来检查所有选项,取消选中所有选项或关闭自己。不幸的是,这些锚点也会触发我的blockUI事件。我尝试使用以下代码阻止事件触发:
$("a.ui-multiselect-none, a.ui-multiselect-all, a.ui-multiselect-close").on("click", function(e) {
e.preventDefault();
});
换句话说,我试图停止标记有窗口小部件类的锚点的默认事件,但这不起作用。实际工作的是我在下面使用的:
$("a.ui-multiselect-none, a.ui-multiselect-all, a.ui-multiselect-close").on("click", $.unblockUI);
但是这个解决方案会对屏幕产生影响,就像闪烁一样。是否有任何方法可以使这些链接简单地不触发blockUI与系统中作为UX异常的其他每个锚点不同?
答案 0 :(得分:1)
您可以分两步完成。首先,从click
事件中删除所有处理程序:
$("a.ui-multiselect-none, a.ui-multiselect-all, a.ui-multiselect-close").off('click');
然后,在optinally,指定自己的处理程序以防止以后的绑定
$("a.ui-multiselect-none, a.ui-multiselect-all, a.ui-multiselect-close").on("click", function(e) {
e.preventDefault();
});
答案 1 :(得分:1)
如果您从不希望这些对象触发blockui
调用,请不要在第一时间将事件侦听器放在它们上面。使用jQuery的:not
选择器:
$("a:not(.ui-multiselect-none, .ui-multiselect-all, .ui-multiselect-close)").on("click", $.blockUI);
答案 2 :(得分:0)
您有两个选择
1)为blockUI创建一个新目标
$("a").on("click", $.blockUI); // Change "a" to something else like "a.target"
2)更改a.ui-multiselect-none, a.ui-multiselect-all, a.ui-multiselect-close
以执行相同的功能,而无需使用anchortag。