2013-02-26 112 views
1

我被卡住,试图解除绑定并重新绑定单击事件。我想“保存”点击事件,取消绑定,并用条件语句重新绑定它。jQuery,试图保存点击事件,解除绑定和重新绑定,无法重新绑定

我能够获得点击这里处理程序使用的信息保存:jQuery find events handlers registered with an object

我在一个旧版本的jQuery(1.5),所以我使用的数据(“事件”)的方法。

到目前为止...

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事件?

谢谢你的任何和所有帮助。

回答

1

您可以使用jQuery中的.die()方法(在1.4.1中添加)。 使用.live()附加的任何处理程序都可以使用.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

+0

我们有,我们在一个单独的.js文件重用了很多的处理函数。它适用于我正在处理的页面中的大量控件,我只需要将条件语句添加到其中的一个,这就是为什么我希望“保存”它,解除绑定并重新绑定它有条件的陈述。现场方法不给我任何错误,但它似乎并没有工作... – Mike 2013-02-26 16:38:42

+0

我试过$('#myElement')。die(); $('#myElement')。live('click',events.click [0] .handler);这是它应该看起来如何?谢谢。 – Mike 2013-02-26 16:39:50

+0

@Mike,我写了一个函数来取回之前绑定的处理程序。请注意,上述代码仅在您使用.live绑定click事件和.die来移除所有事件时才起作用。试试上面的代码。 – Derek 2013-02-26 17:34:31