viernes, 25 de mayo de 2007

¿Manejadores de evento lógicos en vez de manejadores de evento dependientes de dispositivos?

La pauta 9 de las Pautas de Accesibilidad al Contenido en la Web 1.0 lleva por título Diseñe para la independencia del dispositivo. Dentro de esta pauta tenemos el punto de verificación 9.3

9.3 Para los "scripts", especifique manejadores de evento lógicos en vez de manejadores de evento dependientes de dispositivos. [Prioridad 2]


¿Cuál es la razón de este punto de verificación? Básicamente existen dos tipos de eventos, los dependientes del dispositivo y los independientes.

Los eventos dependientes del dispositivo dependen del uso concreto de un dispositivo, como puede ser el ratón y el teclado. Algunos eventos de este tipo son onmouseover, onmouseout y ondblclick.

Los eventos independientes del dispositivo son producidos por cualquier dispositivo, ya sea el ratón o el teclado, por ejemplo. Algunos eventos de este tipo son onfocus, onblur y onselect.

Si en una página web se emplean eventos asociados al uso del ratón, aquellos usuarios que empleen el teclado tendrán problemas para acceder a algunos contenidos. Para evitar este problema, hay que asegurarse de que se puede interactuar con una página mediante cualquier dispositivo. Básicamente, se tienen que emplear los eventos de la siguiente forma:
  • onmousedown con onkeydown
  • onmouseup con onkeyup
  • onmouseover con onfocus
  • onmouseout con onblur
  • onclick con onkeypress
No obstante, hay que llevar un cuidado especial con el evento onclick, ya que en algunas situaciones (cuando se emplea en un enlace o en un control de un formulario) se comporta como un evento independiente del dispositivo, ya que la mayoría de los navegadores asocian la pulsación de la tecla Enter con este evento.

Por tanto, si especificásemos también el evento onkeypress, se podrían ejecutar al mismo tiempo los dos eventos, lo cual ocasionaría problemas.

Para más información, se puede consultar la página Scripts using event handlers de IBM.

No hay comentarios: