O último exemplo da focus()
documentação do jQuery indica
$('#id').focus()
deve tornar a entrada focada (ativa). Parece que não consigo fazer isso funcionar.
Mesmo no console deste site, estou tentando pela caixa de pesquisa
$('input[name="q"]').focus()
e eu não estou conseguindo nada. Alguma ideia?
focus()
funcionalidade. Mais informaçõesRespostas:
Na verdade, o exemplo que você deu para se concentrar neste site funciona muito bem, desde que você não esteja focado no console. O motivo pelo qual não está funcionando é simplesmente porque não está roubando o foco do console de desenvolvimento. Se você executar o seguinte código no console e clicar rapidamente na janela do navegador, verá o foco na caixa de pesquisa:
Quanto ao seu outro, a única coisa que me deu problemas no passado é a ordem dos eventos. Você não pode chamar focus () em um elemento que não foi anexado ao DOM. O elemento que você está tentando focar já foi anexado ao DOM?
fonte
setTimeout
para resolver problemas de ordem de operações torna uma enorme dor no patooty manter. Se um bug aparecer, é realmente difícil depurar. Onde quer que você esteja inserindo o elemento no DOM, ele deve chamar.focus()
lá.Encontrou uma solução em outro lugar na rede ...
não funcionou.
funcionou.
fonte
Algumas das respostas aqui sugerem o uso
setTimeout
para atrasar o processo de foco no elemento de destino. Um deles menciona que o alvo está dentro de um diálogo modal. Não posso comentar mais sobre a correção dasetTimeout
solução sem conhecer os detalhes específicos de onde ela foi usada. No entanto, pensei em fornecer uma resposta aqui para ajudar as pessoas que se deparam com esse segmento, assim como eu fizO simples fato da questão é que você não pode se concentrar em um elemento que ainda não é visível . Se você enfrentar esse problema, verifique se o alvo está realmente visível quando é feita a tentativa de focalizá-lo. No meu próprio caso, eu estava fazendo algo nesse sentido
Isso não funcionou. Eu só percebi o que estava acontecendo quando eu executado $ ( '# elementID'). Focus () `a partir do console, que fez o trabalho. A diferença - no meu código acima do destino, não há certeza de que o destino será visível, pois a animação pode não estar completa . E aí está a pista
funciona exatamente como esperado. Eu também tinha inicialmente colocado uma
setTimeout
solução e funcionou também. No entanto, um tempo limite escolhido arbitrariamente é obrigado a interromper a solução mais cedo ou mais tarde, dependendo da velocidade com que o dispositivo host realiza o processo de garantir que o elemento de destino esteja visível.fonte
visibility:hidden
- ele não será focado.se você usa o bootstrap + modal, isso funcionou para mim:
fonte
Apenas no caso de alguém mais se deparar com essa pergunta e ter a mesma situação que eu - eu estava tentando definir o foco depois de clicar em outro elemento, mas o foco não parecia funcionar. Acontece que eu só precisava de um
e.preventDefault();
- aqui está um exemplo:Isso ajudou:
fonte
Sei que isso é antigo, mas me deparei hoje. Nenhuma das respostas funcionou para mim, o que eu achei que funcionou foi setTimeout. Eu queria que meu foco fosse colocado na entrada arquivada de um modal, usando o setTimeout trabalhado. Espero que isto ajude!
fonte
setTimeout
é uma solução ruim . Você não pode garantir o tempo de execução na máquina do usuário, portanto, as coisas dependentes do tempo são extremamente frágeis.Eu também tive esse problema. A solução que funcionou no meu caso foi usar a propriedade tabindex no elemento HTML.
Eu estava usando
ng-repeat
alguns elementos li dentro de uma lista e não consegui focar na primeira li usando .focus (), então simplesmente adicionei o atributo tabindex a cada li durante o loop.então agora
<li ng-repeat="user in users track by $index" tabindex="{{$index+1}}"></li>
O índice +1 foi iniciado a partir de 0. Verifique também se o elemento está presente no DOM antes de chamar a função .focus ()
Eu espero que isso ajude.
fonte
Para aqueles com o problema de não funcionar porque você usou "$ (elemento) .show ()". Eu resolvi da seguinte maneira:
Portanto, você não precisa de um timer, ele será executado depois que o método show for concluído.
fonte
slideDown()
,fadeIn()
, etc.Adicione um atraso antes do foco (). 200 ms é suficiente
fonte
Teve esse problema novamente agora, e, acredite ou não, tudo que eu precisava fazer era fechar as ferramentas do desenvolvedor. Aparentemente, a guia Console tem a prioridade do foco sobre o conteúdo da página.
fonte
Verifique se o elemento e seus pais estão visíveis. Você não pode usar o foco em elementos ocultos
fonte
SOLUÇÃO ADICIONAL Teve o mesmo problema em que o focus () parecia não funcionar, mas acabou por acontecer que o necessário era rolar para a posição correta:
fonte
Para o meu caso, eu tive que especificar um índice de tabulação (
-1
se possível apenas por script)fonte