Ver Mensaje Individual
  #22 (permalink)  
Antiguo 06/12/2010, 21:55
Avatar de zerokilled
zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: focus() no funciona en firefox

no he seguido muy bien este tema y tengo algo de vagancia leerlo detenidamente. mis disculpas... de todos modos comprobe tanto tu código como el de @furoya. el tuyo tampoco me funciona en firefox. no es un error, @cronos ya trato de explicarlo. es un privilegio que firefox cede al usuario y bajo ciertas circunstancias no se puede manejar el foco. existe una forma de "forzarlo" pero me resisto mencionarlo, pues es bien molestoso cuando un script controla al usuario. recuerda que un script debería mejorar la experiencia de navegación al usuario.

cuantas soluciones existen, no lo sé. pero comprendiendo como es que ocurren las limitaciones nos ayuda a buscar soluciones. básicamente la restrincción de focus ocurre cuando invocas el método en el evento blur. por tanto, la invocación de focus debe suceder fuera del call stack del evento. en javascript -me parece a mi- la única forma de ejecutar un código fuera del call stack son con funciones que se interpretan en el ámbito global: setTimeout, setInterval, eval, Function. con setTimeout es cuestión de asignar el foco luego de un tiempo.
Código:
<input onblur="var that = this; setTimeout(function(){that.focus();}, 0);" />
en este ejemplo el foco siempre se restaura al campo. en tu caso, deberas invocar setTimeout bajo cierta condiciones.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.