0

如果我在输入中按 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();
});
4

1 回答 1

0

尝试.closest()代替.parents().

.closest()一旦匹配就停止向上遍历。.parents()一直持续到找到所有匹配的祖先为止。

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

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

于 2013-10-08T11:30:40.600 回答