2013-10-08 4 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 содержит более одного элемента .list, а .find('a.save') возвращает несколько элементов в .click().

То есть, я думаю, что ваш код непреднамеренно запускает обработчик из другого элемента списка.

Смежные вопросы