Я создал простую «бесконечную» форму с полями ввода. Каждый раз, когда фокусируется пустой ввод, он создает новый, а при размытии пустого поля ввода поле удаляется.
См. пример здесь
Я использую следующий код, чтобы все это произошло:
var $input = $('').html( $('').addClass('value') );
$('form').append( $input.clone() );
$('form').on( 'focus', 'input.value', function(e) {
// Add new input if the focused one is empty
if(!$.trim(this.value).length) {
$('form').append( $input.clone() );
}
}).on( 'blur', 'input.value', function(e) {
var $this = $(this);
if( !$.trim(this.value).length ) {
console.log('REMOVING INPUT');
$this.parent().remove();
} else {
$this.attr('name', 'item-'+$this.val());
}
});
Проблема, однако, в том, что в Chrome событие blur
запускается дважды, когда я переключаюсь на другое приложение ( ⌘tab).Это выдает ошибку, потому что удалить узел невозможно, так как его уже нет:
Uncaught Error: NOT_FOUND_ERR: DOM Exception 8
Firefox вроде работает нормально.
Так почему же событие blur
запускается дважды и как этого избежать?
РЕДАКТИРОВАТЬ- Пробовал ответить в на этот вопрос, но безуспешно. Все еще получаю сообщение об ошибке в Chrome, что я делаю неправильно?
Есть ли способ проверить, существует ли еще элемент? Поскольку во второй раз blur
срабатывает, узел удаляется. $(this).length
по-прежнему не равно нулю.