2011-09-14 18 views
5

Hai mai affrontare bug di questo IE7:Risolvere bug IE7 "input type = file" onchange fire due volte?

<input type="file" id="xxx"> 

<script> 
    $('#xxx').change(function(){ alert(1) }) 
</script> 

quando clicco l'ingresso & scegliere un file, l'alertbox mostra per la prima volta. Quindi faccio clic sull'area vuota sul corpo, la casella di avviso mostra ancora una volta. Ciò accade anche quando lego l'evento change all'immissione: file con JQuery 1.6 (il più recente in questo momento).

Come posso evitare questo nel modo più semplice? Grazie per tutti i suggerimenti!

+0

Penso che in IE7 il primo evento sia la modifica del file, il secondo evento si verifica quando il campo perde il focus (onblur). –

+0

odio suggerire una variabile per limitare il codice all'esecuzione solo una volta. – f0x

risposta

6

Questo è quello che ho fatto dopo alcune ore duri di "brain storming":

$('input:file').click(
    function(){ 
     $(this).one(
       'change', 
       function(){ alert(1) /*do stuff here*/ } 
     ) 
    } 
) 

Ogni utente clicca volta l'ingresso scegli il file, leghiamo l'evento "cambia" una volta con esso. Quindi l'evento si attiva esattamente una volta ogni volta che l'utente vuole selezionare un file.

E grazie a Dio funziona! Grazie a tutti.

+0

Grazie mille! Vorrei poterlo revocare decine di volte. Risolto il mio problema – SirDerpington

0

Vorrei semplicemente non associare il grilletto una volta che la funzione è eseguito

+0

E uccidere la funzione per la durata della visita della pagina dopo la prima esecuzione? ;) – f0x

+0

Hai ragione, potrebbe essere quindi possibile mettere l'evento su un trigger .blur() a scopo di test per vederlo se viene chiamato due volte, IE potrebbe inviare due istruzioni a .change() dove .blur () è quando si perde la messa a fuoco – Narvath

Problemi correlati