Javascript 使用名称空间解除某些事件处理程序的绑定
我想问,如何从Javascript 使用名称空间解除某些事件处理程序的绑定,javascript,jquery,Javascript,Jquery,我想问,如何从文档中删除事件处理程序,而只删除具有命名空间的事件处理程序 我有这段代码,我看不到任何错误,但此函数始终为mouseup和touchend触发事件处理程序,即使在.unbind之后也是如此。我确信这段代码中有一些错误 $(".inp").on("autocompleteresponse", function(event, ui) { $(document).bind( "mouseup.test, touchend.test", function(e) {
文档
中删除事件处理程序,而只删除具有命名空间的事件处理程序
我有这段代码,我看不到任何错误,但此函数始终为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");
}
}
});
});
感谢您的建议首先,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")