如果我在输入中按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();
});
答案 0 :(得分:0)
尝试使用.closest()
代替.parents()
。
.closest()
一旦匹配就停止向上移动。 .parents()
继续前进,直到找到所有匹配的祖先。
我的猜测没有看到您的HTML(请在问题中显示您的标记!)是您有一个嵌套列表,其中包含多个.list
元素,每个元素都有自己的.one()
处理程序,并且您的使用.parents('li')
找到了内部和外部li元素,然后找到的最外层li元素包含多个.list
元素,.find('a.save')
将多个元素返回到.click()
。
也就是说,我认为你的代码无意中从另一个列表项触发了处理程序。