2016-12-14 164 views
1

我知道解除綁定事件是完善的,但由於某些原因,這是行不通的。如果「trash_mode」方法被調用它附加一個事件處理程序「my_div」,使得被點擊這些div當他們從DOM中刪除:解除綁定涉及從DOM刪除jquery的點擊事件

function trash_mode() { 
    $('#my_div').click(function remove_from_dom(){ 
       var id = $(this).attr('id'); 
       var use_id = "#" + id; 
       $(use_id).remove(); 
       }); 
} 

這個偉大的工程。然後,我想再次調用「trash_mode」方法從div中刪除此事件處理程序。因此,舉例來說,我可能會嘗試:

$('#my_div').off("click", "remove_from_dom"); 

當函數被再次調用(使用某種形式的肘杆機構)。但是這不起作用... div仍然從DOM中刪除(點擊事件仍然附加)。

每次調用「trash_mode」方法時,是否有辦法在「remove_from_dom」方法(開啓和關閉)之間切換?

+0

請創建jsfiddle請 –

回答

0

jQuery API文檔說.off()函數的第二個參數是一個選擇器,而不是處理程序的名稱。

API Doc

好像你可能想通過調用所有的div的一些父元素的.off()功能和使用第二個參數來選擇他們是最好做的事情。

$('#my_div_parent').off("click", "#my_div"); 

該文檔還指出,.off()功能是爲了與.on()配對,因此,如果您仍然無法刪除的事件處理程序,你可以嘗試改變你附加的事件處理程序的第一方式地點。

+0

感謝您的回答。我最終在on()方法中使用了一個if-else語句。 – Cybernetic

0

我能得到這個工作的唯一方法是把一個if-else語句內jQuery的「對()」方法,像這樣:

<button onclick="trash_mode()">TOGGLE TRASH MODE</button> 

var count = 0; 
function trash_mode() 
$("#my_div").on("click", function() { 
        var id = $(this).attr('id'); 
        var use_id = "#" + id; 
        if(count != 0){ 
        $(use_id).remove(); 
        count=0; 
        } else { 
        count++; 
        } 
        }); 
} 

現在,每次點擊的按鈕,它將在啓用/禁用之間切換remove()事件處理程序。