jQuery.one()被触发两次
如果我在输入中按Enter键,并在同一秒钟内在输入外单击,为什么与jQuery.one()绑定的事件会被触发两次?AFAIK one()应最多触发1次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
$('.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()
也就是说,我认为您的代码无意中从不同的列表项触发了处理程序。在这里工作正常: