我知道解开事件的建立良好,但是由于某种原因,这行不通。如果称为" 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()事件处理程序。