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?
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.
duplicato di http://stackoverflow.com/questions/9649966/chrome-maybe-safari-fires-blur-twice-on-input-fields-when-browser-loses-foc –
sì, sapevo che questo mi sembrava familiare: -) – Pointy
Grazie, stupido, ho cercato jQuery :(Provandolo ora – floorish