2010-02-28 12 views
5

El detector de eventos Prototype que uso para cambios en los menús de selección no se desencadena en IE.Event.observe 'change' no se desencadenan eventos en IE

Event.observe('use_billing', 'change', Checkout.getBillingData); 

Esto funciona bien en Firefox (por supuesto), pero no pasa nada en el IE (por supuesto) - He estado buscando en Google esto durante algún tiempo, pero no he encontrado una solución adecuada a este problema. Leí que hay problemas, pero no encontré nada útil para eludir el problema y hacer que esto funcione.

estoy realmente tratando de evitar el uso de activadores de eventos en línea, ya que son molestos y hacer un documento desordenado propenso a errores:

<select id='use_billing' onchange="Checkout.getBillingData();">....</select> 

Cualquier idea sería grande - esta es la única cosa que este proyecto pasar de beta a producción.

Respuesta

2

Encontré la razón, no fue el problema de enfoque, resultó que tenía el nombre del elemento de formulario y los valores de identificación iguales, cambié el valor de identificación y todo funcionó bien.

3

Esto es un problema común con IE. No desencadena los eventos change hasta que el elemento pierde el foco.

Para verificar que esta es la causa de su problema, intente cambiar el menú y luego presione tab para mover su foco a otro elemento. Si su devolución de llamada se activa correctamente, sabrá que no hay otro problema.

He solucionado este problema antes al escuchar también otros eventos como click o keydown. Puedes agregar un cheque a tu devolución de llamada para asegurarte de que el valor es realmente diferente al anterior para asegurarte de que no estás procesando el evento más veces de lo necesario (ya que otros navegadores dispararán click y change al mismo tiempo si hacen clic en un nuevo valor).

2

Sé que este es un tema antiguo, pero quería compartir una respuesta alternativa a la anterior. En mi código, el nombre y la identificación del elemento eran los mismos, pero eso no importaba.

En la función que se activa, el argumento del evento se pasó del prototipo. Para obtener el valor del cuadro de texto (que provoca el evento) en Firefox utiliza eventArg.currentTarget.value

pero en IE debe utilizar eventArg.srcElement.value

Así que con el fin de que funcione en ambos navegadores debe utilizar ...

var value = "";
var id = "";
if(eventArg.currentTarget){//FireFox
value = eventArg.currentTarget.value;
id = eventArg.currentTarget.id;
}
else{//IE
value = eventArg.srcElement.value;
id = eventArg.srcElement.id;
}

Cuestiones relacionadas