首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery,正在尝试保存单击事件,取消绑定并重新绑定,无法重新绑定

问jQuery,正在尝试保存单击事件,取消绑定并重新绑定,无法重新绑定
EN

Stack Overflow用户
提问于 2013-02-27 00:18:29
回答 1查看 3.1K关注 0票数 1

我在尝试解除绑定和重新绑定单击事件时卡住了。我想“保存”click事件,解除它的绑定,然后用一个条件语句重新绑定它。

我可以使用下面的信息保存点击处理程序:jQuery find events handlers registered with an object

我使用的是旧版本的jQuery (1.5),所以我使用的是data("events")方法。

到目前为止。

代码语言:javascript
复制
var events = $('#myElement').data("events");

alert(events.click[0].handler);

$('#myElement').unbind('click');

现在它将警告我处理程序函数,并且它看起来是正确的。我想向它添加一些东西,但我认为对于初学者来说,我只是尝试重新绑定相同的点击事件。但是,我不确定如何正确地重新绑定。我尝试过的东西:

代码语言:javascript
复制
$('#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事件?

感谢您的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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

代码语言:javascript
复制
<div id="myElement">Testing save event</div>

JavaScript

代码语言: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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15094036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档