2012-06-04 20 views
5

Deseo disparar un evento onchange para todos los cambios de elementos de formulario dentro de un DIVno onchange disparar en IE

He aquí el fragmento

<html> 
<body> 

<div id="container"> 
    <input type="checkbox"/> 
    <input type="checkbox"/> 
    <input type="text"/> 
    <input type="text"/> 
</div> 

<script> 
di = document.getElementById("container"); 
di.onchange = function(a){ 
alert("On Change Called"); 
} 

di.onclick = function(a){ 
alert("On Click Called"); 
} 

</script> 

</body> 
</html> 

El evento se dispara cuando un foco se pierde de cualquiera de los elementos del formulario a un nuevo elemento del formulario, cuando se actualiza algún contenido (p. ej .: se actualiza el cuadro de entrada)

El código anterior funciona bien para todos los navegadores pero no para IE, cualquier forma de hacerlo es IE

+1

posible duplicado de [onchange event doest no bubble en MSIE. ¿Dónde puedo encontrar un gráfico que enumere todos esos eventos] (http://stackoverflow.com/questions/1552689/onchange-event-doest-not-bubble-in-msie-where-do-i-find-a-chart- listing-all-suc) – Strelok

+0

Recomiendo usar jQuery para evitar estos problemas de navegador cruzado, pero eso no significa que deba omitir las pruebas. [Jquery on Change reference here.] (Http: //api.jquery.com/change /) Scott Leberknight's onChange [http://www.nofluffjuststuff.com/blog/scott_leberknight/2005/04/onclick_versus_onchange_in_ie_and_firefox](http://www.nofluffjuststuff.com/blog/scott_leberknight/2005/04/ onclick_versus_onchange_in_ie_and_firefox) – xivo

Respuesta

7

En realidad, IE, especialmente IE7/8 no es compatible con el evento onchange muy bien. Le recomiendo que use el evento onclick.

+2

Perfecto, eso resolvió mi problema. No es necesario usar jQuery. –

1

Evitar el uso de .focus() o .select() antes .Cambiar() función de jQuery para IE, entonces funciona bien, im usarlo en mi sitio.

Gracias

0

mayoría todos desarrollador web deben haber enfrentado este problema .. Yeh la versión anterior de Internet Explorer a veces no se dispare el evento onChange y su sustitución por onClick obras.

Pero esto no se espera con la última IE 11. Lo que encontré en mi caso fue que el nombre de la función que se llamaba en el caso onChange estaba chocando en alguna parte. Lo cambié por otro nombre que debería sonar único en todo el contexto, luego funcionó.

Conclusión: IE 11 conseguir confundido cuando encuentre algunos nombres similares dentro del sistema de juego con la función onchange objetivo (incluso los nombres de los archivos supongo), mientras que los otros navegadores son inteligentes suficiente.

+0

En mi caso, mi máquina de desarrollo ejecutándose en Windows 10 + IE11 (KB3203621), onchange se activó perfectamente. Pero cuando lo despliego a producción, las pruebas realizadas en Windows 7 + IE11 (KB2841134), onchange se niegan a funcionar. Pero de alguna manera en KeyPress funcionó tanto en la máquina de desarrollo como en el entorno de producción. ¿Podría estar relacionado con esas versiones de actualización? – mutanic

+0

@mutanic yeh .. lo más probable es que hayan solucionado esto, pero en la última versión. –

0

Actualmente, Onchange no funciona muy bien en IE. Esto es lo que hice al usar Javascript. Puede replicarlo en consecuencia.

  1. Agregue el evento drop en HTML para llamar a la función que se está llamando ahora, en lugar de onchange.
  2. Agregue el código siguiente en sus js presentar

    document.getElementById('--your selector--').ondragover = handle; 
    
    function handle(evt) 
    { 
        evt.stopPropagation(); 
        evt.preventDefault(); 
        evt.dataTransfer.dropEffect = 'copy' 
    } 
    
  3. El ondragover se hará falsa por el código de seguridad, y luego ondrop disparará en todos los navegadores y llame a la función requerida