2016-12-14 113 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()事件处理程序。