我试图取消绑定并重新绑定点击事件。我想“保存”click事件,取消绑定它,并用条件语句重新绑定它。
我可以使用以下信息保存点击处理程序:jQuery find events handlers registered with an object
我使用的是旧版本的jQuery(1.5),所以我正在使用数据(“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事件?
感谢您的帮助。
答案 0 :(得分:1)
您可以在jQuery中使用.die()
方法(在1.4.1中添加)。
任何使用.dive()附加的处理程序都可以使用.die()。
参考.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