2011-09-14 15 views
5

¿Alguna vez se enfrentan a este fallo de Internet Explorer 7:Resuelva IE7 error "input type = file" onchange fire dos veces?

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

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

al hacer clic en la entrada & escoger un archivo, el Alertbox muestra la primera vez. Luego hago clic en el área en blanco en el cuerpo, el cuadro de alerta muestra una vez más. Esto sucede incluso cuando enlazo el evento de cambio a la entrada: archivo con JQuery 1.6 (lo más importante en este momento).

¿Cómo puedo evitar esto de la manera más simple? Gracias por todas las sugerencias!

+0

Creo que en IE7 el primer evento es el cambio de archivo, el segundo evento ocurre cuando el campo pierde el foco (onblur). –

+0

odiaría sugerir una variable para limitar el código para que se ejecute solo una vez. – f0x

Respuesta

6

Esto es lo que he hecho después de algunas horas duras de "lluvia de ideas":

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

Cada vez que el usuario haga clic en la entrada de elegir archivo, vinculamos el evento "cambiar" una vez con él. Por lo tanto, el evento se dispara exactamente una vez cada vez que el usuario desea elegir un archivo.

Y gracias a Dios que funciona! Gracias a todos.

+0

¡Muchas gracias! Ojalá pudiera votarlo docenas de veces. Resolvió mi problema. – SirDerpington

0

yo simplemente desenlazar el gatillo una vez que su función se corrió

+0

¿Y matar la función durante la visita de la página después de la primera ejecución? ;) – f0x

+0

Tiene razón, podría ser posible poner el evento en un desencadenador .blur() con fines de prueba para ver si se llama dos veces, IE podría enviar dos instrucciones al .change() donde .blur () es cuando pierdes el foco – Narvath

Cuestiones relacionadas