解除涉及从DOM

时间:2016-12-14 01:04:40

标签: javascript jquery

我知道解除绑定的事件已经很成熟,但由于某种原因,这种情况并不奏效。如果" trash_mode"方法被调用它将事件处理程序附加到" my_div",这样当单击这些div时,它们将从DOM中删除:

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中删除(点击事件仍然附加)。

有没有办法在" remove_from_dom"之间切换?方法(打开和关闭)每次" trash_mode"方法叫做?

2 个答案:

答案 0 :(得分:0)

jQuery API文档说.off()函数的第二个参数是选择器,而不是处理程序的名称。

API Doc

通过在所有div的某些父元素上调用.off()函数并使用第二个参数来选择它们,看起来你想要的最好。

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

该文档还指出,.off()功能旨在与.on()配对,因此,如果您仍然无法删除事件处理程序,则可以尝试更改附加方式首先是事件处理程序。

答案 1 :(得分:0)

我能让这个工作的唯一方法就是在jquery' s#34; .on()"中添加一个if-else语句。方法,像这样:

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