175 votes

Comment définir automatiquement le focus sur une zone de texte lorsque une page web se charge?

Comment définir automatiquement le focus sur un champ de texte lors du chargement d'une page web?

Y a-t-il une balise HTML pour le faire ou cela doit-il être fait via Javascript?

263voto

Ben Scheirman Points 23590

Si vous utilisez jquery:

$(function() {
  $("#Box1").focus();
});

ou prototype:

Event.observe(window, 'load', function() {
  $("Box1").focus();
});

ou du javascript pur:

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

gardez à l'esprit que cela remplacera d'autres gestionnaires d'événements au chargement, donc recherchez addLoadEvent() sur Google pour une manière sûre d'ajouter des gestionnaires d'événements au chargement au lieu de les remplacer.

3 votes

Pourquoi ne pas mettre des gestionnaires sur l'élément body? Une référence? Merci

7 votes

Parce qu'il est beaucoup plus propre de séparer le javascript de l'HTML. Vous devriez ajouter un comportement de script aux éléments visuels dans votre HTML.

100voto

dave1010 Points 6595

En HTML, il existe un attribut autofocus pour tous les champs de formulaires. Il y a un bon tutoriel à ce sujet dans Dive Into HTML 5. Malheureusement, il n'est actuellement pas supporté par les versions d'IE inférieures à 10.

Pour utiliser l'attribut HTML 5 et passer à une option JS :

  if (!("autofocus" in document.createElement("input"))) {
    document.getElementById("my-input").focus();
  }

Aucune jQuery, aucun gestionnaire d'événements n'est requis, car le JS est situé en dessous de l'élément HTML.

Édition : un autre avantage est qu'il fonctionne avec JavaScript désactivé dans certains navigateurs et vous pouvez supprimer le JavaScript lorsque vous ne voulez pas prendre en charge les anciens navigateurs.

Édition 2 : Firefox 4 prend désormais en charge l'attribut autofocus, laissant simplement IE sans support.

3 votes

Qu'est-ce que c'est avec le autofocus="aufofocus"? Tous les liens que vous avez fournis disent simplement d'ajouter l'attribut : autofocus.

7 votes

À l'époque du XHTML et de l'HTML4, il était courant de faire attribut="valeur" pour les attributs booléens. L'HTML5 est arrivé avec la "syntaxe d'attribut vide" et nous avons supprimé la redondance. Maintenant, nous pouvons faire

0 votes

J'aime cette approche... Ce code va avec l'input... supprimez l'input et bam, le code associé est juste là... Nous nous perdons tellement de nos jours... Retour en arrière maintenant en essayant de simplifier...

17voto

Espo Points 24318

Vous devez utiliser javascript :


@Ben note que vous ne devriez pas ajouter des gestionnaires d'événements de cette manière. Bien que cela soit une autre question, il recommande d'utiliser cette fonction :

function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    }
  }
}

Ensuite, ajoutez un appel à addLoadEvent sur votre page et référencez une fonction qui définisse le focus sur votre zone de texte souhaitée.

13voto

Amir Chatrbahr Points 71

Vous pouvez le faire facilement en utilisant jQuery de cette manière :

    $(document).ready(function () {
        $("#myTextBoxId").focus();
    });

en appelant cette fonction dans $(document).ready().

Cela signifie que cette fonction s'exécutera lorsque le DOM sera prêt.

Pour plus d'informations sur la fonction READY, veuillez consulter : http://api.jquery.com/ready/

12voto

Jon Points 1203

Utilisation de html et javascript vanilla

function SetFocus()
{
    // vérification de sécurité, assurez-vous qu'il s'agit d'un navigateur post-1999
    if (!document.getElementById)
    {
        return;
    }

    var txtMyInputBoxElement = document.getElementById("txtMyInputBox");

    if (txtMyInputBoxElement != null)
    {
        txtMyInputBoxElement.focus();
    }
}
SetFocus();

Pour ceux qui utilisent le framework .net et asp.net 2.0 ou supérieur, c'est trivial. Si vous utilisez des versions plus anciennes du framework, vous devrez écrire un peu de javascript similaire ci-dessus.

Dans votre gestionnaire OnLoad (généralement page_load si vous utilisez le modèle de page fourni avec visual studio), vous pouvez utiliser :

C#

protected void PageLoad(object sender, EventArgs e)
{
    Page.SetFocus(txtMyInputBox);
}

VB.NET

Protected Sub PageLoad(sender as Object, e as EventArgs)

    Page.SetFocus(txtMyInputBox)

(* Note j'ai enlevé le caractère souligné du nom de la fonction qui est généralement Page_Load puisqu'il refusait de se rendre correctement dans un bloc de code! Je n'ai pas trouvé dans la documentation du balisage comment obtenir les soulignements se rendre non échappés.)

J'espère que cela vous aidera.

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