Creé un formulario simple 'infinito' con campos de entrada. Cada vez que se enfoca una entrada vacía, crea una nueva, y en el desenfoque de un campo de entrada vacío, el campo se elimina.Evento jQuery blur desencadenado dos veces en Chrome
Ver example here
utilizo el siguiente código para hacer que todo suceda:
var $input = $('<div/>').html($('<input/>').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());
}
});
El problema es, sin embargo, que en Chrome caso blur
se dispara dos veces al cambiar a otra aplicación (⌘tab). Esto da un error, ya que no es posible eliminar el nodo, puesto que ya se ha ido:
Uncaught Error: NOT_FOUND_ERR: DOM Exception 8
Firefox parece funcionar bien.
Entonces, ¿por qué se dispara el evento blur
dos veces y cómo puedo evitar que esto suceda?
EDIT - Intenté la respuesta en this question, pero no tuve suerte. Todavía aparece el mensaje de error en Chrome, ¿qué estoy haciendo mal?
¿Hay una manera de comprobar si todavía existe el elemento? Porque la segunda vez que blur
dispara, el nodo se elimina. $(this).length
todavía no es cero.
duplicado de http://stackoverflow.com/questions/9649966/chrome-maybe-safari-fires-blur-twice-on-input-fields-when-browser-loses-foc –
sí Sabía que esto parecía familiar: -) – Pointy
Gracias, estúpido, busqué jQuery :(Probándolo ahora – floorish