2010-09-30 43 views
1

我有一個操縱Google地圖的工具欄。一些功能影響放置在地圖上的標記。我有一個清除更改並將地圖返回到原始狀態的重置按鈕。jQuery在函數運行後解除綁定行爲

我需要「禁用」重置按鈕,直到地圖更改。所以...

  1. 當一個操作完成操作映射時,我將ResetMap()函數綁定到重置按鈕。
  2. 重置按鈕被單擊並將地圖返回到原始狀態。
  3. 重置按鈕操作再次解除綁定。

但是,我無法獲得第3步的工作。我試圖在ResetMap()函數結束時解除綁定的情況下,像這樣:

function ResetMap(){ 
var Wrapper = $("#page_layout").find("#InlineToolbarMessages"); 
if(Wrapper.hasClass('isExpanded')){ 
    Wrapper.removeClass('isExpanded'); 
    Wrapper.addClass('isCollapsed'); 
} 
$("#page_layout").find('#NumSelectedNumber').html("0"); 
$("#page_layout").find('div#SelectedVoters').html(""); 
clearMarkers(); 
$('#page_layout').find('#reset_button').unbind('click', function(){ 
    ResetMap(); 
}); 
} 

我也嘗試了更多的全球:

$('#page_layout').find('#reset_button').unbind(); 

沒有成功。我究竟做錯了什麼?

+0

我發現如果我做了$('#reset_button')。unbind('click');在我調用它的ClearMarkers()函數之前。同樣在不同的按鈕的另一個功能,我把解除綁定在開始,它的工作。想法? – jmorhardt 2010-09-30 23:52:38

回答

2

編輯:基於您的評論,你」 ......發現,如果[你]做$('#reset_button').unbind('click');之前[你]被稱爲'ClearMarkers()``函數,它的工作同樣在其他功能。一個不同的按鈕,[你]將解除綁定放在一開始,它就起作用了。「

這讓我覺得,無論是A)前面的代碼拋出異常,阻止你獲得的unbind呼籲所有,或B)的代碼早在去除reset_button按鈕或添加另一個與相同的ID(這將使文檔無效並且ID選擇器的行爲不確定)。


原來的答案

變化

$('#page_layout').find('#reset_button').unbind('click', function(){ 
    ResetMap(); 
}); 

$('#page_layout').find('#reset_button').unbind('click', ResetMap); 

...假設你在bind調用中使用ResetMap。由於您沒有顯示bind,所以很難確定。

當你調用unbind一個函數引用,它必須是完全相同的功能參考你給bind(或bind的捷徑之一,click和這樣)。

因此,舉例來說,這個工程:

// Binding 
$("#myElement").bind("click", myFunction); 

// Unbinding 
$("#myElement").unbind("click", myFunction); 

...但這不起作用

// Binding 
$("#myElement").bind("click", function() { 
    myFunction(); 
}); 

// Unbinding 
$("#myElement").unbind("click", function() { // <== Does not work 
    myFunction(); 
}); 

...因爲函數的引用是不一樣的。