jQuery.one()被触发两次

时间:2013-10-08 11:19:51

标签: 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 $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();
});

1 个答案:

答案 0 :(得分:0)

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

.closest()一旦匹配就停止向上移动。 .parents()继续前进,直到找到所有匹配的祖先。

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

也就是说,我认为你的代码无意中从另一个列表项触发了处理程序。