【问题标题】:jQuery, trying to save click event, unbind and rebind, unable to rebindjQuery,试图保存点击事件,解除绑定和重新绑定,无法重新绑定
【发布时间】:2013-02-26 16:18:28
【问题描述】:

我一直在尝试解除绑定和重新绑定点击事件。我想“保存”点击事件,解绑,然后用条件语句重新绑定。

我可以使用此处的信息保存点击处理程序: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 变量重新绑定点击事件?

感谢您的所有帮助。

【问题讨论】:

    标签: jquery


    【解决方案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

    【讨论】:

    • 我们有一个处理函数,我们在一个单独的 .js 文件中重用了很多。它被应用于我正在处理的页面中的大量控件,我只需要向其中一个添加条件语句,这就是为什么我希望“保存”它,取消绑定它,然后用条件语句不知何故。 live 方法没有给我任何错误,但它似乎也不起作用......
    • 我试过 $('#myElement').die(); $('#myElement').live('click', events.click[0].handler);它应该是这样的吗?谢谢。
    • @Mike ,我写了一个函数来取回之前绑定的处理程序。请注意,上面的代码仅在您使用 .live 绑定点击事件和使用 .die 删除所有事件时才有效。试试上面的代码。
    猜你喜欢
    • 2018-02-13
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 2015-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-20
    相关资源
    最近更新 更多