2010-01-19 56 views
7

tengo este sencillo selecto:jQuery 1.4 bug cambio evento en IE

<select name="zlecenia_index_icpp" id="items_per_page"> 
    <option value="10">10</option> 
    <option value="25" selected="selected">25</option> 
    <option value="50">50</option> 
</select> 

y en ella hay:

$('#items_per_page').change(function(){ 
    var controller_action = this.name.replace(/_/g, '/'); 
    location.href = config.base_url + '/' + controller_action + '/'+this.value; 
}); 

Solía ​​trabajar en jQuery 1.3, pero en 1.4 el evento de cambio es despedido tan pronto como haga clic en el cuadro de selección. ¿Hay alguna solución además de volver a 1.3?


Esto realmente parece que hay un error y se ha informado a jQuery:

http://dev.jquery.com/ticket/5869

Ha habido un parche aplicado y será parte de jQuery 1.4.1.

http://github.com/jquery/jquery/commit/435772e29b4ac4ccfdefbc4045d43f714e153381

+1

Informé el error aquí: http://dev.jquery.com/ticket/5869 –

+0

¿Alguna versión particular de IE? – ScottKoon

+0

Lo he visto en IE 7 con XHTML 1.0 Strict en mi caso. –

Respuesta

-4

Usted puede utilizar el evento blur() de jQuery. Tal vez algo como esto:

var defaultValue = 10; 

$('#items_per_page').blur(function(){ 
    if ($("#items_per_page").val() == defaultValue) 
     return; //The value wasn't changed, so return. 
    var controller_action = this.name.replace(/_/g, '/'); 
    location.href = config.base_url + '/' + controller_action + '/'+this.value; 
}); 
+0

Esto tiene el mismo efecto que el evento de cambio. Creo que la clave para que funcione para usted es que ha incluido una interrupción. –

0

no estoy seguro de si se supone que debe funcionar de esta manera, pero usted está accediendo this.value y this.name en la misma devolución de llamada. Supongo que this se refiere a event.currentTarget, que en este caso es el elemento SELECCIONAR.

En ese caso, this.value no estará definido, pero puede intentar usar $(this).val(); en su lugar.

¿Has intentado consolar las variables?

+2

Todo ha estado funcionando durante un año con 1.3, solo es un problema con jQuery 1.4 en IE. – pambuk

+0

¿Qué le dan this.value y this.name? – David

+0

this.value es el valor de la opción seleccionada, que es el valor de selección; this.name es el nombre de selección. – pambuk

3

De http://jquery14.com/day-01/jquery-14

change y submit eventos normalizado (Cambio de documentación, presentar la documentación)

El cambio y presentar eventos funcionan fiable a través de los navegadores para ambos eventos normales y en vivo. Omitimos el cambio normal y enviamos eventos al Internet Explorer y los reemplazamos por con eventos que funcionan de manera idéntica a con los otros navegadores.

Bien, parece que es un error, ya sea en IE o JQuery.

Lo que está causando el problema es que el atributo seleccionado = "seleccionado" en la opción está ocasionando que el evento de cambio se active antes de que ocurra cualquier evento de mouse. Supongo que es una rareza/error con IE, ya que parece que no establece el elemento seleccionado HASTA que sea visible, lo que provoca que el cambio se active incluso en el menú desplegable inicial. Digo que es un error en IE porque si llamo a window.event.cancelBubble, el controlador de eventos no se dispara en absoluto.

Eso es realmente extraño.

La solución consiste en eliminar el atributo seleccionado.

+0

es definitivamente un error en jQuery 1.4, agregando un atributo onchange a la selección funciona muy bien en IE independientemente de cualquier atributo seleccionado en las opciones secundarias. –

+0

Sí, era un error que se solucionó en 1.41. – ScottKoon

0

todavía estoy recibiendo un problema similar, incluso con 1.4.1.

Utilizando el siguiente ejemplo:

  1. seleccionar un valor de la lista de selección - aparece una alerta (correcta).
  2. Haga clic en el enlace Cambiar - la lista de selección se restablece en 0 (Corregir).
  3. Haga clic en la lista Seleccionar: aparece una alerta. (Incorrecto)

La alerta en el tercer paso no aparece en 1.3.2.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" > 
<head> 
    <title>Untitled Page</title> 

    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"></script> 

    <script type="text/javascript"> 

    $(document).ready(function(){ 
     $('#dropDownList1').bind('change',function(){ alert("changed"); }); 

     $('#btnChange').click(function(){ 
      $('#dropDownList1')[0].selectedIndex = 0; 
     }); 
    }); 


    </script> 
</head> 
<body> 
     <select id="dropDownList1"> 
      <option value="0">0</option> 
      <option value="1">1</option> 
      <option value="2">2</option> 
     </select> 

     <a href="#" id="btnChange">Change</a> 
</body> 
</html> 
+0

He reportado un error para esto - http://dev.jquery.com/ticket/5959 – Rezler

+0

Solo ocurre después de usar el enlace 'Cambiar' e incluso entonces ocurre solo una vez (ie7). – pambuk

Cuestiones relacionadas