如何暂时禁用按钮上的点击事件而不实际禁用它?

Ove*_*esh 12 javascript jquery

使用jQuery,我想在不更改disabled给定按钮的属性的情况下,禁用所有单击事件.

我正在考虑检索click事件处理程序,解除绑定并存储它们(比如说,使用data()).

然后,一旦再次启用按钮,我就可以重新绑定它们.

Dav*_*ang 17

不难做到,因为jQuery已经将所有事件处理程序存储data()在元素本身上.您可以通过获取(和修改)此对象.data().events.

现在,您可以使用以下命令轻松保存对处理程序的引用:

 events._click = events.click;
 events.click = null;
Run Code Online (Sandbox Code Playgroud)

然后使用以下命令恢复它们:

 events.click = events._click;
 events._click = null;
Run Code Online (Sandbox Code Playgroud)

请注意,这不会禁用通过事件冒泡/传播工作的事件.delegate()或事件绑定.live()的事件.要禁用它们,只需绑定一个阻止传播到祖先元素的新处理程序:

 events._click = events.click;
 events.click = null;
 // Block .live() and .delegate()
 $("#el").click(function (e) {
     e.stopPropagation();
 });
Run Code Online (Sandbox Code Playgroud)

在需要再次启用处理程序时,您甚至不需要取消绑定此阻止程序功能,因为events.click = events._click它将覆盖您刚刚与所有旧处理程序绑定的功能.

  • 它似乎不再起作用了(至少从jQuery 1.10开始). (3认同)