2011-06-19 26 views
6

Al hacer clic en un enlace en google chrome, el evento de enfoque no se activa. Todos los demás navegadores activan el evento de foco para enlaces.Error de enlace de Google Chrome Javascript

<a href=# onfocus="console.log('focus')">Link</a> 

No quiero adjuntar el evento onmousedown, sino onfocus.

Cualquiera tiene una idea para una solución.

EDIT:

Definitivamente consideraría esto un error, porque todos los demás elementos enfocable desencadenan enfoque al hacer clic.

Incluso elementos no enfocables con un disparador tabindex se centran en hacer clic en google chrome.

<div tabindex="-1" onfocus="console.log('focus')">div</div> 

No puedo adjuntar a la vez click y focus porque entonces onclick, otros navegadores se llame a la función dos veces. No puedo detectar esta funcionalidad porque requiere la interacción del usuario , y no haré la detección de cadenas de agentes de usuario, porque es incorrecta.

Utilizando este código HTML:

<a href=# onfocus="console.log('focus')" onmousedown="console.log('mousedown')">Link</a> 

son ellos de ninguna manera para invalidar la segunda onmousedown llamada a prevenir la función que se llama dos veces en los navegadores no Google.

EDIT 2:

Después de algunas pruebas adicionales <input type=radio> también falla al llamar enfoque en Google Chrome. ¿Por qué en el mundo es google Chrome así, mientras que Opera, IE y Firefox están bien. Lo que es una locura es que el navegador webkit móvil incluso desencadena el foco en los enlaces cuando lo probé en mi dispositivo Android.

+0

http://jsfiddle.net/82QXv/ –

+0

De hecho, no funciona. Además, cuando enfoco el enlace usando la tecla de tabulación, el evento de enfoque se dispara repetidamente. Esto parece roto. Chrome 12.0.742.100 –

+0

Para consultar con la tecla 'tab': http://jsfiddle.net/82QXv/1/ –

Respuesta

1

Un trabajo en torno a que podría hacer para evitar la doble focus eventos de estallar en los navegadores que trabajan al mismo tiempo conseguir el evento focus para hacer estallar en Chrome, es que en una haga clic en evento comprobar si algo tiene focus en la página, y si no, desencadenar el evento focus.

con jQuery que se podría hacer de esta manera:

$('a').click(function(e){ 
    if(!$('*:focus').length) $(this).trigger('focus');   
}); 

ejemplo: http://jsfiddle.net/niklasvh/qmcUt/

+1

Interesante, parece que 'document.activeElement' se refiere a document.body al activar' onmousedown', o 'onclick' porque para google chrome el elemento nunca recibió el foco. http://jsfiddle.net/qmcUt/36/ También cambié el clic a 'mousedown' para que se active cuando la mayoría de los navegadores activan' focus'. – William

3

Eso realmente funciona bien, excepto que el evento de enfoque no se desencadena simplemente haciendo clic en el enlace (intente tabular y verá que se activa el evento). No creo que sea un error, ¿por qué no solo proteger y usar ambas cosas?

+1

+1. Webkit no activa el evento a menos que el usuario use el teclado. – Triptych

+0

@Triptych - Me pregunto, ¿por qué? El W3C parece decir que está bien que un "dispositivo señalador" active el foco: http://www.w3.org/TR/html4/interact/scripts.html#adef-onfocus –

+0

Edité mi publicación explicando más el problema, y por qué debería ser archivado como un error. – William

0

Puede utilizar pequeña Hack:

<a href="#" onfocus="console.log('focus')" onclick="this.focus()">Link</a> 
Cuestiones relacionadas