2010-03-12 10 views
9

Parece que en la mayoría de los navegadores, un <input type="submit"> trata tanto de [barra espaciadora] como de [enter] como un clic, pero un enlace <a> solo trata [enter] como un clic.jQuery: ¿evento de clic de activación en los enlaces con la barra espaciadora?

Mi aplicación utiliza una serie de enlaces formateados para simular botones, por lo que un usuario que está acostumbrado a tabular un botón y presionar [barra espaciadora] se verá frustrado.

Este poco de jQuery resuelve el problema:

$("a.Button").die("keypress").live("keypress", function(e) { 
    if (e.which == 32) { 
     $(this).trigger("click"); 
     e.preventDefault(); 
    } 
}); 

Mi pregunta: ¿Hay alguna razón para no hacerlo? Soy un poco reacio a anular el comportamiento predeterminado del navegador en algo tan básico como esto, pero como ya estoy abusando de la etiqueta de enlace para que parezca un botón, al menos de esta manera no estoy violando las expectativas del usuario. promover.

+0

FWIW esta es una aplicación con un público limitado. Javascript es un requisito establecido para usarlo. Hace un uso intensivo de mapas, cuadros, cuadrículas editables y otros elementos visuales y/o interactivos, y no tengo claro si sería posible hacerlo utilizable mediante un lector de pantalla. –

+0

Esto no parece funcionar para los botones de enlace ASP.NET que producen elementos de anclaje con un href de 'javascript: WebForm_DoPostBackWithOptions (new WebForm_PostBackOptions ("ctl00 $ main $ uclFind $ uclEntry $ btnGet", "", true, "", "", falso, verdadero)) ' –

Respuesta

6

Creo que el estándar más importante para mantener no es el comportamiento del navegador, sino la respuesta esperada del usuario.

Si ha redefinido la visualización de enlaces convirtiéndolos en botones, el usuario debe ser capaz de tratar esos "botones" exactamente como lo harían si fuera un botón real, de lo contrario, confundirá e irritará a los usuarios que han gastado años con este comportamiento "aprendido".

0

Existen las preocupaciones de usabilidad estándar.

Creo que "parece que" es la clave aquí. Si alguien está usando un lector de pantalla, 'verá' un enlace y actuará de manera apropiada.

Si alguien tiene javascript desactivado, la función jquery (obviamente) no se ejecutará y también obtendrá el comportamiento del enlace.

Obviamente ya has hecho la búsqueda del alma (!) Sobre el uso de un enlace como un botón, por lo que se trata de tratar estos dos casos: lector de pantalla y no de JavaScript.

Si no puede simular el comportamiento del botón (en un enlace) para estos dos casos, ofrecerá a diferentes personas una experiencia diferente, lo cual es una buena razón para no usar la función. O bien la barra espaciadora debe activar cada uso de estos enlaces/botones o ninguno de ellos.

+0

No estoy de acuerdo por un par de razones 1) El hecho de que existan estándares no significa que deban aplicarse en todas las situaciones. En este caso particular, si seguía su consejo, estaría renunciando * a la respuesta esperada * de cada usuario, en lugar de solo a los pocos que eligen no participar en JS. 2) También está asumiendo que un usuario prefiere que funcione en el sistema * no *, en lugar de solo * algunos * sistemas. Puedo ver que esto es un problema con las aplicaciones del lado del cliente, pero en la web, para todos los propósitos prácticos, las páginas web casi siempre se procesan de maneras sutilmente diferentes. La expectativa del usuario es que este será el caso. – dclowd9901

+0

Bastante justo: ¿qué hay de los lectores de pantalla? ¿Pueden ignorarlos? – amelvin

Cuestiones relacionadas