你能通过jQuery覆盖给定类的HTML元素的某些动作吗?

时间:2014-02-21 20:03:12

标签: javascript jquery html 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异常的其他每个锚点不同?

3 个答案:

答案 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。