Algunas de las respuestas aquí sugieren usar setTimeout
para retrasar el proceso de enfocarse en el elemento objetivo. Uno de ellos menciona que el objetivo está dentro de un diálogo modal. No puedo comentar más sobre la corrección de la setTimeout
solución sin conocer los detalles específicos de dónde se utilizó. Sin embargo, pensé que debería proporcionar una respuesta aquí para ayudar a las personas que se encuentran con este hilo tal como lo hice yo
El simple hecho del asunto es que no puede enfocarse en un elemento que aún no es visible . Si se encuentra con este problema, asegúrese de que el objetivo sea realmente visible cuando se haga el intento de enfocarlo. En mi propio caso estaba haciendo algo en este sentido
$('#elementid').animate({left:0,duration:'slow'});
$('#elementid').focus();
Esto no funcionó. Sólo me di cuenta de lo que estaba pasando cuando ejecuté $ ( '# elementID'). Enfoque () `de la consola, que hizo el trabajo. La diferencia: en mi código sobre el objetivo no hay certeza de que el objetivo sea visible ya que la animación puede no estar completa . Y ahí yace la pista
$('#elementid').animate({left:0,duration:'slow',complete:focusFunction});
function focusFunction(){$('#elementid').focus();}
Funciona tal como se esperaba. Yo también había puesto inicialmente una setTimeout
solución y también funcionó. Sin embargo, un tiempo de espera elegido arbitrariamente romperá la solución tarde o temprano, dependiendo de la lentitud del proceso del dispositivo host para garantizar que el elemento objetivo sea visible.