JavaScript définit le focus sur l'élément de formulaire HTML


332

J'ai un formulaire Web contenant une zone de texte. Comment puis-je définir le focus sur la zone de texte par défaut?

Quelque chose comme ça:

<body onload='setFocusToTextBox()'>

alors quelqu'un peut-il m'aider? Je ne sais pas comment définir le focus sur la zone de texte avec JavaScript.

<script>
function setFocusToTextBox(){
//What to do here
}
</script>

21
Aussi simple que document.getElementById('your_text_box_id').focus();.
Teemu

Réponses:


576

Faites ça.

Si votre élément est quelque chose comme ça ..

<input type="text" id="mytext"/>

Votre script serait

<script>
function setFocusToTextBox(){
    document.getElementById("mytext").focus();
}
</script>

3
Vous devez numériser le document à l'aide d'autres parties de l'API Web (par exemple Document.forms, Document.getelementsByTagNameou Node.childNodes) et vous fier à une structure de document connue ou rechercher des propriétés spécifiques à un élément.
peterph

40
Ou la réponse évidente ... donnez-lui une pièce d'identité;)
Pertinent

4
Je déconseille d'utiliser un identifiant car il est trop spécifié. Utilisez plutôt le nom ou même une classe. Dans ce cas, vous utiliseriez document.querySelector ("[name = 'myText']") ou document.querySelector (". MyText") pour obtenir une référence à l'élément d'entrée.
Chris Love

12
@ChrisLove Conseils intéressants. Pourquoi un identifiant est-il "sur-spécifié" et quel est exactement le problème? C'est plus simple, plus précis et le code pour le localiser, sera légèrement plus rapide, avec un identifiant. Cela me semble être la chose la plus évidente et la plus sensée à faire, si c'est possible.
PandaWood

4
@ChrisLove, cela ne spécifie pas trop un sélecteur CSS, il définit un attribut ID HTML - la spécificité est un problème dans la façon dont le traitement CSS analyse les sélecteurs DOM, pas un problème avec la façon dont les attributs ID et classe fonctionnent en HTML. Il n'est pas conseillé d'utiliser les mêmes sélecteurs DOM pour attacher CSS que pour attacher JS, ce qui signifie que vous pouvez conserver la différenciation que vous décrivez
Toni Leigh

142

Pour ce que ça vaut, vous pouvez utiliser l' autofocusattribut sur les navigateurs compatibles HTML5. Fonctionne même sur IE à partir de la version 10.

<input name="myinput" value="whatever" autofocus />

51
Gardez à l'esprit que cela ne fonctionne que pour définir le focus lors du premier chargement de la page; il ne peut pas être utilisé pour définir le focus ultérieurement en réponse à la saisie.
Martin Carney

Je crains que l'attribut autofocus ne soit pas compatible si IOS Safari ( caniuse.com/#search=autofocus ) tandis que .focus () est tout simplement incompatible avec Opera Mini ( caniuse.com/#search=focus )
lfrodrigues

3
Notez que si vous essayez de vous concentrer à partir de la console, ce n'est pas possible!
Ou Choban

65

Habituellement, lorsque nous nous concentrons sur une zone de texte, nous devons également faire défiler la vue

function setFocusToTextBox(){
    var textbox = document.getElementById("yourtextbox");
    textbox.focus();
    textbox.scrollIntoView();
}

Vérifiez si cela aide.


2
Cela peut être un vrai casse-tête sur un écran plus petit si le champ est hors écran :-)
Toni Leigh

Si vous avez une barre d'en-tête qui est fixe, vous devrez peut-être utiliser textbox.scrollIntoView (false), cela place simplement l'élément en bas au lieu du haut.
DeadlyChambers

30

Si votre code est:

<input type="text" id="mytext"/>

Et si vous utilisez JQuery, vous pouvez également l'utiliser:

<script>
function setFocusToTextBox(){
    $("#mytext").focus();
}
</script>

Gardez à l'esprit que vous devez d'abord dessiner l'entrée $(document).ready()


11
J'ai rétrogradé cela, car il n'y a à distance aucune implication de jQuery dans la question de base. L'OP voulait rester purement javascript
Fallenreaper

11
Eh bien, vous avez raison, je me suis trompé, mais je pense que c'est quand même utile.
Richard Rebeco

4
Je vote positivement parce que dans les projets où jQuery est déjà utilisé et vous éléments en tant qu'objets de sélection jQuery, il est préférable d'être cohérent au lieu d'utiliser vanilla JS.
paradite

8
@Fallenreaper Downvotes sont pour egregiously sloppy, no-effort-expended post, or an answer that is clearly and perhaps dangerously incorrect, selon le centre d'aide de stackoverflow. Je trouve cela loin de ces catégories. L'aide ne se limite pas au PO, n'est-ce pas?
Gellie Ann

@GellieAnn Bien qu'il s'agisse d'une réponse, elle n'entre pas dans le cadre de la question des PO. Il y a une raison pour laquelle il utilise du javascript vanille, et bien que vous puissiez mentionner d'autres cadres et donner des pointeurs ou des conseils pour en mener un et expliquer pourquoi, vous devez toujours résoudre la réponse dans les limites de la question posée. Par conséquent, je maintiens mon downvote.
Fallenreaper

20

Pour du Javascript simple, essayez ce qui suit:

window.onload = function() {
  document.getElementById("TextBoxName").focus();
};

3

J'utilisais juste ceci:

<html>
  <head>
    <script type="text/javascript">
      function focusFieldOne() {
        document.FormName.FieldName.focus();
      }
    </script>
  </head>

  <body onLoad="focusFieldOne();">
    <form name="FormName">
      Field <input type="text" name="FieldName">
    </form>
  </body>
</html>

Cela dit, vous pouvez simplement utiliser l'attribut autofocus dans HTML 5.

Veuillez noter: je voulais mettre à jour cet ancien fil de discussion montrant l'exemple demandé ainsi que la mise à jour plus récente et plus facile pour ceux qui lisent encore ceci. ;)


1

Comme mentionné précédemment, document.forms fonctionne également.

function setFocusToTextBox( _element ) {
  document.forms[ 'myFormName' ].elements[ _element ].focus();
}

setFocusToTextBox( 0 );
// sets focus on first element of the form

Le formulaire AFAIK n'a pas d'attribut "nom"
Marecky

Les formulaires ont depuis longtemps des "noms", et en HTML5, ils le font toujours. Voir w3.org/TR/html5/forms.html#the-form-element
Mac


0

window.onload consiste à mettre le focus initialement surblur, c'est à mettre le focus pendant que vous cliquez en dehors de la zone de texte, ou d'éviter le flou de la zone de texte

    <textarea id="focus"></textarea>
    <script>
     var mytexarea=document.getElementById("focus");
    window.onload=function()
    {

    mytexarea.focus();

    }

mytextarea.onblur=function(){

mytextarea.focus();

}
    </script>
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.