删除涉及从DOM删除的点击事件



我知道解开事件的建立良好,但是由于某种原因,这行不通。如果称为" trash_mode"方法,它将事件处理程序附加到" my_div",以便在单击这些divs时将其从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"方法以从Divs中删除此事件处理程序。因此,例如,我可能会尝试:

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

再次调用函数(使用某种切换机制)。但这无效... DIVS仍然从DOM中删除(点击事件仍在附加)。

每当" trash_mode"方法称为?

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

api doc

通过在所有divs的某些父元素上调用.off()函数并使用第二个参数选择它们,这似乎是最好的做法。

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

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

我能让这个工作的唯一方法是将if-else语句放入jQuery的" .on()"方法中,如这样:

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

最新更新