En el siguiente ejemplo, obtengo solo un cuadro de alerta. Leí que el foco se pone antes de que se ejecute el código JavaScript. ¿Hay alguna manera de hacer que esto funcione?onfocus no se llama cuando se utiliza el atributo de enfoque automático en una etiqueta de entrada
<input id="i" type="text" autofocus onfocus="alert(1)">
<script type="text/javascript">
document.getElementById('i').addEventListener('focus', function() {
alert(2);
}, false);
</script>
(Sólo he probado esto en Safari)
Editar: que, obviamente, puede hacerlo de esta manera (PrototypeJS selector):
var autofocusElement = $$('input[autofocus]')[0];
callListener(autofocusElement);
Pero se ve feo en comparación con sólo añadir un oyente de eventos.
Editar:
No se preocupe por la falta de soporte de los navegadores para el atributo de enfoque automático. Se resolvió fácilmente como lo he hecho en los enlaces de violín a continuación. También hay la mejor solución al problema, como puedo ver. Mi pregunta es si puedo hacerlo de una manera menos fea que tener que llamar al oyente de forma manual.
http://jsfiddle.net/tellnes/7TMBJ/3/
Funciona bien en Firefox 3.6 Firefox ya no soporta el enfoque automático. Pero en Safari, que admite autofocus, no se llama al evento.
mal enlace violín? – Rahul
@Rahul Parece que he cambiado el nombre de mi nombre de usuario jsfiddle desde que se publicó. He actualizado el enlace. –