2012-06-23 17 views
6

Ho creato un semplice modulo 'infinito' con campi di input. Ogni volta che un input vuoto è a fuoco ne crea uno nuovo e, sfocato di un campo di input vuoto, il campo viene rimosso.jQuery evento sfocato sparato due volte in Chrome

Vedi example here

Io uso il seguente codice per rendere il tutto accada:

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()); 
    } 

}); 

Il problema è però che in Chrome caso blur viene attivato due volte quando mi passa a un'altra applicazione (scheda). Questo dà un errore, perché non è possibile rimuovere il nodo, dal momento che è già andato:

Uncaught Error: NOT_FOUND_ERR: DOM Exception 8 

Firefox sembra funzionare bene.

Quindi perché l'evento blur è stato attivato due volte e come posso evitare che ciò accada?

EDIT - Ho provato la risposta in this question, ma senza fortuna. Ricevi ancora il messaggio di errore in Chrome, cosa sto facendo male?

See updated fiddle

C'è un modo per verificare se l'elemento esiste ancora? Poiché la seconda volta blur viene attivato, il nodo viene rimosso. $(this).length è comunque diverso da zero.

+2

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

+0

sì, sapevo che questo mi sembrava familiare: -) – Pointy

+0

Grazie, stupido, ho cercato jQuery :(Provandolo ora – floorish

risposta

Problemi correlati