假设整个站点上有大量元素,这些元素有未知数量和类型的事件被绑定。
如果我需要用一个绑定事件覆盖所有这些事件,并且只有这个事件会触发,你有什么建议?
我将把事件绑定到一个单击事件处理程序上,并且我使用jQuery。
提前致谢。
如果我需要用一个绑定事件覆盖所有这些事件,并且只有这个事件会触发,你有什么建议?
我将把事件绑定到一个单击事件处理程序上,并且我使用jQuery。
提前致谢。
您需要使用jQuery#unbind
。
要移除一个元素或一组元素上的所有事件处理程序,只需执行以下操作:
$('.some-selector').unbind();
要解除绑定仅针对点击处理程序,请使用unbind('click')
:
$('.some-selector').unbind('click');
如果要解除所有点击事件的绑定并在解绑之后立即绑定自己的处理程序,可以像这样做:
$('.some-selector').unbind('click').click(function(event) {
// Your code goes here
});
请注意,这仅适用于使用jQuery绑定的事件(使用.bind
或任何使用.bind
内部的jQuery方法)。如果您想从给定的一组元素中删除所有可能的onclick事件,您可以使用:
$('.some-selector')
.unbind('click') // takes care of jQuery-bound click events
.attr('onclick', '') // clears `onclick` attributes in the HTML
.each(function() { // reset `onclick` event handlers
this.onclick = null;
});
$(".some-selector").unbind("click").attr("onclick", "").each(function(){ this.onclick = null; });
? - Alexander Wallin我希望提供一个想法,不需要完全删除所有事件(只需覆盖它们)。
如果您的新绑定事件(我们称其为“click”)仅针对绑定到的元素,则我认为您可以通过stopPropagation()函数忽略任何其他事件。像这样:
$("specific-selector").on("click", ".specific-class", function (e) {
e.stopPropagation()
// e.stopImmediatePropagation()
/* your code continues ... */
});
bind
。然后,您可以轻松地从选择器中使用die删除现有绑定,这是一项快速操作,并且同样快速设置另一个实时绑定。 $('selection here').live('..', .....); // multiple invocations
$('selection here').die();
$('selection here').live('click',.....);
DOM 不会被触碰。事件条件在事件发生时进行评估。
但通常如果您只想交换处理程序函数,为什么不这样做:
var ahandler = function(evt) { /* first implementation */ }
$('.selector').bind('click', function(evt) { ahandler(evt); });
//and then if you want to change handlers
ahandler = function(evt) { /* new implementation */ };
这样做可以完全免费地进行任何更改、重新绑定等操作。
看起来这实际上很简单:
$('#foo').unbind('click');
$('#foo').bind('click', myNewFunction);
虽然如此,感谢您的回复。