使用jQuery,我想在不更改给定按钮的禁用属性的情况下,禁用所有点击事件.
我正在考虑检索点击事件处理程序,解除绑定并存储它们(比如说使用data()).
然后一旦再次启用按钮,我可以重新绑定它们.
解决方法
不难做,因为jQuery已经将其所有的事件处理程序作为data()存储在元素本身上.您可以通过.data().事件获取(和修改)此对象.
在您的控制台中尝试$(“#portalLink a”).data().events.click = null,以禁用此页面左上方的“StackExchange”下拉列表.
现在,您可以轻松地保存对处理程序的引用:
events._click = events.click; events.click = null;
然后使用以下命令恢复它们:
events.click = events._click; events._click = null;
请注意,这不会禁用通过.delegate()或.live()绑定的事件,因为它们通过事件冒泡/传播工作.要禁用它们,只需将阻止传播的新处理程序绑定到祖先元素:
events._click = events.click; events.click = null; // Block .live() and .delegate() $("#el").click(function (e) { e.stopPropagation(); });
当您再次启用处理程序时,甚至不需要解除此阻止程序的功能,因为events.click = events._click将覆盖刚刚与所有旧处理程序绑定的函数.