2012-06-23 7 views
6

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?

See updated fiddle

¿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.

+2

duplicado de http://stackoverflow.com/questions/9649966/chrome-maybe-safari-fires-blur-twice-on-input-fields-when-browser-loses-foc –

+0

sí Sabía que esto parecía familiar: -) – Pointy

+0

Gracias, estúpido, busqué jQuery :(Probándolo ahora – floorish

Respuesta

Cuestiones relacionadas