我在尝试解除绑定和重新绑定单击事件时卡住了。我想“保存”click事件,解除它的绑定,然后用一个条件语句重新绑定它。
我可以使用下面的信息保存点击处理程序:jQuery find events handlers registered with an object
我使用的是旧版本的jQuery (1.5),所以我使用的是data("events")方法。
到目前为止。
var events = $('#myElement').data("events");
alert(events.click[0].handler);
$('#myElement').unbind('click');现在它将警告我处理程序函数,并且它看起来是正确的。我想向它添加一些东西,但我认为对于初学者来说,我只是尝试重新绑定相同的点击事件。但是,我不确定如何正确地重新绑定。我尝试过的东西:
$('#myElement').bind('click', null, events.click[0].handler); // gives 'click.0 is null or not an object
$('#myElement').bind('click', events.click[0].handler); // gives 'click.0 is null or not an object
$('#myElement').bind('click', null, events.click); // seems to have no effect
$('#myElement').bind('click', events.click); // seems to have no effect所以我觉得我差不多做到了,但我不确定从现在开始该怎么做。如何使用events变量重新绑定click事件?
感谢您的帮助。
发布于 2013-02-27 00:30:38
您可以使用jQuery中的.die()方法(在1.4.1中增加)。可以使用.die()删除任何附加了.live()的处理程序。
.die()的引用:http://api.jquery.com/die/
.live()的引用:http://api.jquery.com/live/
HTML
<div id="myElement">Testing save event</div>JavaScript
<script type="text/javascript">
$(document).ready(function() {
function ClickEventHandler()
{
alert('abc');
}
$('#myElement').live('click', ClickEventHandler);
function GetClickEventHandler(selector)
{
for(var i = 0 ; i < $._data(document).events.live.length ; i++)
{
if( $._data(document).events.live[i].selector == selector )
{
return $._data(document).events.live[i].handler;
}
}
return null;
}
var myFn = GetClickEventHandler('#myElement');
$('#myElement').die();
$('#myElement').live('click', myFn );
});
</script>要查看代码是否正常工作,您可以尝试注释掉$('#myElement').live('click', myFn );并单击元素,它应该不会发出警报。然后重新启用此功能,它将发出警报。
新增jsfiddle示例:
其中一个被注释掉了:http://jsfiddle.net/9wbPH/1/
一个是实际工作:http://jsfiddle.net/9wbPH
https://stackoverflow.com/questions/15094036
复制相似问题