Это происходит непосредственно из-за делегирования события с jQuery live () связывание событий с использованием live не привязывает прямой элемент. Вместо этого он прикрепляет обработчик к корневому узлу документа.
Метод .live () может влиять
элементы, которые еще не были добавлены
в DOM через использование события
делегирование: обработчик, связанный с
элемент предка отвечает за
события, которые вызваны его
потомки. Обработчик перешел к
.live () никогда не привязывается к элементу;
вместо этого .live () связывает специальный
обработчик корня дерева DOM.
В нашем примере, когда новый элемент
при нажатии выполняются следующие шаги:
Если вы хотите сохранить фокус на вводе при нажатии на элемент #dBox, это сработает, и вот demo http://www.jsfiddle.net/WurDE/
Примечание: если вы не хотите сохранять фокус на входе, удалите trigger('focus')
из кода.
$(function () {
$('#s').focus(function(){
if (!$('#dBox').length) {
var $dbox = $('<ul id="dBox"></ul>');
for (i=0;i<10;i++) $dbox.append('<li>'+i+'</li>');
$(this).after($dbox);
$dbox.bind("mousedown", function() {
$('#s').unbind('blur')
});
$dbox.bind("mouseup", function() {
$('#s').bind('blur', function () {
$('#dBox').remove();
}).trigger('focus');
});
}
});
$('#s').bind('blur', function () {
$('#dBox').remove();
});
});