Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用名称空间解除某些事件处理程序的绑定_Javascript_Jquery - Fatal编程技术网

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")