Событие размытия jQuery срабатывает дважды в Chrome

Я создал простую «бесконечную» форму с полями ввода. Каждый раз, когда фокусируется пустой ввод, он создает новый, а при размытии пустого поля ввода поле удаляется.

См. пример здесь

Я использую следующий код, чтобы все это произошло:

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по-прежнему не равно нулю.

6
задан Community 23 May 2017 в 12:04
поделиться