jQuery.one()被触发两次

jQuery.one()被触发两次,jquery,javascript-events,Jquery,Javascript Events,如果我在输入中按Enter键,并在同一秒钟内在输入外单击,为什么与jQuery.one()绑定的事件会被触发两次?AFAIK one()应最多触发1次 $('.list').one('click', 'a.save', function(e) { e.stopPropagation(); e.preventDefault(); ... }); $('.list input') .on('keypress', function(e) { var $th

如果我在输入中按Enter键,并在同一秒钟内在输入外单击,为什么与jQuery.one()绑定的事件会被触发两次?AFAIK one()应最多触发1次

$('.list').one('click', 'a.save', function(e) {
        e.stopPropagation();
        e.preventDefault();
...
});


 $('.list input')
.on('keypress', function(e) {
    var $this = $(this);
    var code = (e.keyCode ? e.keyCode : e.which);
    if (code == 13 | code == 10) {
        $this.parents('li').find('a.save').click();
    }
})
.on('blur', function(e) {
    var $this = $(this);
    $this.parents('li').find('a.save').click();
});
请尝试
.closest()
而不是
.parents()

一旦匹配,就停止向上移动。直到找到所有匹配的祖先

在没有看到html的情况下(请在问题中显示您的标记!)我的猜测是,您有一个嵌套列表,其中包含多个
.list
元素,每个元素都有自己的
.one()
处理程序,并且您使用
.parents('li')
查找内部和外部的li元素,然后,找到的最外面的li元素包含多个
。list
元素,而
。find('a.save')
将多个元素返回到
。click()

也就是说,我认为您的代码无意中从不同的列表项触发了处理程序。

在这里工作正常: