我想问一下,如何从document
删除事件处理程序,但只删除具有命名空间的事件处理程序?
我有这段代码,我没有看到任何错误,但是这个函数总是在mouseup
之后触发touchend
和.unbind
的事件处理程序。我确定我在这段代码中有一些错误。
$(".inp").on("autocompleteresponse", function(event, ui) {
$(document).bind( "mouseup.test, touchend.test", function(e) {
var container = $('.ui-autocomplete');
if (!container.is(e.target) && container.has(e.target).length === 0) {
if (ui.content.length > 0) {
ui.item = ui.content[0];
console.log (ui.item);
$(".inp").val(ui.item.label);
// This will fire always, on document click, should only once per time
$(document).unbind("mouseup.test, touchend.test");
}
}
});
});
感谢您的建议
答案 0 :(得分:2)
首先,on()
和off()
现在是首选方法,而不是过时的bind()
和unbind()
。
其次,要解决您的问题,您应该使用空格而不是逗号分隔事件。试试这个:
$(".inp").on("autocompleteresponse", function(event, ui) {
$(document).on("mouseup.test touchend.test", function(e) {
var container = $('.ui-autocomplete');
if (!container.is(e.target) && container.has(e.target).length === 0) {
if (ui.content.length > 0) {
ui.item = ui.content[0];
console.log(ui.item);
$(".inp").val(ui.item.label);
$(document).off("mouseup.test touchend.test");
}
}
});
});
另请注意,如果要关闭与命名空间关联的所有事件,可以单独将命名空间传递给off()
方法:
$(document).off(".test")