2012-03-28 6 views
17

En Internet Explorer (cualquier versión) si hace clic dos veces rápidamente, una casilla de verificación cambia solo una vez. Otros navegadores no hacen esto.¿Por qué la casilla de verificación de Internet Explorer acepta hacer doble clic pero cambiar el estado solo una vez?

Esto es "por diseño" o un comportamiento muy extraño (error)?

+0

vuelta en el día había una opción "detectar doble clics accidentales" enterrados en cualquiera de las opciones de IE o el explorador, podría ser que –

+0

¿Conoce si esta opción ya existe? –

+1

la respuesta actual se ve bien ... si necesita una solución alternativa, publique algún código o cuál es su objetivo. ¿Usas JQuery? ¿Qué pasa con el doble clic ...? –

Respuesta

2

Esto parece ser un error general en IE que se aplica no solo a las casillas de verificación, sino a la administración de clics en general. Parece que será corregido en IE9 Platform Preview 4:

http://webbugtrack.blogspot.com/2008/01/bug-263-beware-of-doubleclick-in-ie.html

+0

En realidad, IE9 ya fue lanzado. IE10 también. Pero parece que este artículo habla de que los eventos se dispararon erróneamente, y no del hecho de que no se pueda verificar y desmarcar rápidamente. –

+0

@VitorCanova: Correcto, pero estos eventos son lo que usa la casilla de verificación para hacer sus cambios ... –

+2

No es un error, es ... Tomo la puerta. – m4tm4t

8

Mientras estaba trabajando como administrador de sistemas en muchas empresas diferentes que he visto muchas veces las personas que utilizan DoubleClick como acción predeterminada para interactuar con cualquier elemento de la interfaz de usuario. Lo primero que aprendieron sobre Windows es que doubleclick lanza un icono (acceso directo). Y aplican este conocimiento a todos los demás elementos, sin importar lo que realmente sea: enlace, botón, ícono 0 casilla =) Entonces, supongo que lo hizo deliberadamente, que IE cuenta doble clic como singleclick.

1

Solución/Solución

Usando jQuery He arreglado el problema como este:

this.checkboxes = $('input[type="checkbox"]'); 
if (navigator.userAgent.match(/MSIE/i)){ 
     this.checkboxes.dblclick(function() { 
      if($(this).prop('checked')) {      
       $(this).prop('checked', false); 
      } else { 
       $(this).prop('checked', true); 
      } 
     }); 
} 
this.checkboxes.click(function(e) {     
    // do whatever a click should do           
}); 

Explicación: En un doble clic en Internet Explorer, los eventos se activan como esto:

  1. Haga clic en
  2. Haga clic en
  3. D ouble Haga clic en

Con un doble clic, la acción deseada en mi evento de clic ocurrió dos veces (como debería), pero la casilla de verificación no cambió los estados dos veces. Así que simplemente alteré el estado marcado/no verificado nuevamente cuando se dispara un doble clic. Como esto rompería la funcionalidad en Firefox/Chrome/etc, solo lo usé en los agentes de usuario de MSIE (Internet Explorer).

Con el código anterior, el fuego eventos y casillas de verificación-unidos/cambio como éste:

doble clic en todos los navegadores excepto IE:

  1. Click (cambio de estado, el fuego de eventos de clic)
  2. click (cambiar de estado, el fuego de eventos de clic)

doble clic en una casilla de verificación en Internet Explorer

  1. Click (cambio de estado, el fuego de eventos de clic)
  2. Click (fuego evento de clic)
  3. doble click (cambio de estado (a través del evento de doble clic))
1

El siguiente código funciona para mí:

<input type="checkbox" OnClick ="javascript:toggleGetSelected(this)"> 

var temp; 
function toggleGetSelected(e){ 
     if(e){ 

      // Below is the if condition which handles the double click 
      if(e.checked==true && temp==e.value){ 
        e.checked=false; 
      } 
      // ends double click handle 


      if(e.checked==true){ 
       temp=e.value; 
       // your code here      
      } 
      else{ 
       temp=null; 
       // your code here   
      } 

     } 
} 
+1

Funciona para mí –

Cuestiones relacionadas