2013-10-08 111 views
0

爲什麼綁定jQuery.one()的事件會被觸發兩次,如果我在輸入中敲入Enter並且在輸入外面同樣的第二次單擊? AFAIK one()應該被觸發最大。 1次!jQuery.one()被觸發兩次

$('.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

提供jsfiddle? – hjpotter92

+2

在此處運行良好:http://jsfiddle.net/BpgFz/1/ –

回答

0

嘗試.closest()而不是.parents()

.closest()只要匹配就停止向上移動。 .parents()繼續前進,直到找到所有匹配的祖先。

我沒有看到你的HTML(請出示的問題你的標記!)的猜測是,你有一個嵌套列表與多個.list元素,每個都有自己的.one()處理程序,您的.parents('li')使用同時尋找內和外部li元素,然後找到的最外面的li元素包含多於一個的元素,並且.find('a.save')正在將多個元素返回到.click()

也就是說,我認爲你的代碼無意中觸發了不同列表項的處理程序。