207 votes

$.focus() ne fonctionne pas

Le site Dernier exemple de l'utilisation de jQuery focus() documentation États

$('#id').focus()

devrait rendre l'entrée focalisée (active). Je n'arrive pas à le faire fonctionner.

Même dans la console de ce site, je l'essaie pour la boîte de recherche.

$('input[name="q"]').focus()

et je n'obtiens rien. Vous avez une idée ?

2 votes

Pouvez-vous nous montrer votre code ?

0 votes

Il faudra en savoir plus, car cela fonctionne bien pour moi : jsfiddle.net/G7hwR/1 il suffit de cliquer n'importe où dans le panneau de droite et il se concentre...

0 votes

Le focus de cette page ne devrait-il pas fonctionner ? L'extrait que j'ai fourni ?

5voto

Kumar Shubham Points 307

J'ai également rencontré ce problème. La solution qui a fonctionné dans mon cas a été d'utiliser la propriété tabindex sur l'élément HTML.

J'utilisais ng-repeat pour certains éléments li à l'intérieur d'une liste et je n'ai pas réussi à mettre l'accent sur le premier li en utilisant .focus(), j'ai donc simplement ajouté l'attribut tabindex à chaque li pendant la boucle.

alors maintenant <li ng-repeat="user in users track by $index" tabindex="{{$index+1}}"></li>

Ce +1 était l'indice commence à partir de 0. Assurez-vous également que l'élément est présent dans le DOM avant d'appeler la fonction .focus().

J'espère que cela vous aidera.

4voto

user3861385 Points 49

Je réalise que c'est vieux, mais je suis tombé dessus aujourd'hui. Aucune des réponses n'a fonctionné pour moi, ce que j'ai trouvé qui a fonctionné était setTimeout. Je voulais que le focus soit placé sur le champ d'entrée d'une modale, l'utilisation de setTimeout a fonctionné. J'espère que cela vous aidera !

4voto

Abel Points 2430

Ajoutez un délai avant focus(). 200 ms est suffisant

function focusAndCursor(selector){
  var input = $(selector);
  setTimeout(function() {
    // this focus on last character if input isn't empty
    tmp = input.val(); input.focus().val("").blur().focus().val(tmp);
  }, 200);
}

3voto

aexl Points 1718

J'ai eu ce problème à nouveau à l'instant, et croyez-le ou non, tout ce que j'ai eu à faire était de fermer les outils de développement. Apparemment, l'onglet Console a la priorité sur le contenu de la page.

2voto

Rolando Retana Points 343

Pour ceux qui ont le problème de ne pas fonctionner parce que vous avez utilisé "$(element).show()". Je l'ai résolu de la manière suivante :

 var textbox = $("#otherOption");
 textbox.show("fast", function () {
    textbox[0].focus();
  });

Vous n'avez donc pas besoin d'un timer, il s'exécutera après que la méthode show soit terminée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X