2013-02-26 111 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