95 votes

document.getElementById(id).focus() ne fonctionne pas avec firefox ou chrome

Quand jamais je le fais onchange event, c'est aller à l'intérieur de cette fonction sa validation, Mais la concentration n'est pas venir j'utilise document.getElementById('controlid').focus();

J'utilise Mozilla Firefox et Google Chrome, dans les deux son ne fonctionne pas. Je ne veux pas d'IE. Quelqu'un peut-il me dire pourquoi ?

Merci d'avance

Voici le code :

var mnumber = document.getElementById('mobileno').value; 
if(mnumber.length >=10) {
    alert("Mobile Number Should be in 10 digits only"); 
    document.getElementById('mobileno').value = ""; 
    document.getElementById('mobileno').focus(); 
    return false; 
}

128voto

Andy E Points 132925

Essayez d'utiliser une minuterie :

const id = "mobileno";
const element = document.getElementById(id);
if (element.value.length >= 10) {
    alert("Mobile Number Should be in 10 digits only");
    element.value = "";
    window.setTimeout(() => element.focus(), 0);
    return false;
}

Une minuterie avec un nombre de 0 s'exécutera lorsque le thread deviendra inactif. Si cela n'aide pas, essayez plutôt le code (avec la minuterie) dans l'événement onblur.

70voto

2astalavista Points 7092

2 choses à mentionner si focus() ne fonctionne pas :

  • utiliser cette fonction après l'ajout au parent
  • si la console est sélectionnée, après l'actualisation de la page, l'élément ne se focalisera pas, alors sélectionnez (cliquez sur) la page Web pendant le test

Cela fonctionne à la fois dans Firefox et Chrome sans setTimeOut().

37voto

user1279447 Points 21
window.setTimeout(function () { 
    document.getElementById('mobileno').focus(); 
}, 0); 

Ça a marché pour moi aussi. Firefox définirait la valeur de mon élément, mais ne lui donnerait pas de focus.

30voto

aexl Points 1718

Mon cas était un peu différent. J'essayais de focus() une entrée à partir d'une console de développement de navigateur. Il s'avère que cela interférait avec l'entrée d'une manière ou d'une autre, et une fois que j'ai minimisé la console, tout a fonctionné comme prévu. Je comprends que ce ne soit pas une solution programmatique, mais au cas où quelqu'un trouverait ça sur un moteur de recherche comme je l'ai fait, il y a une chance que cette information pourrait aider.

22voto

Tous les éléments ne sont pas focalisables mais par défaut, il y a un attribut tabindex pour corriger cela.

Lorsque vous assignez tabindex= à un élément :

Il devient focalisable. Un utilisateur peut utiliser la touche Tab pour passer de l'élément avec un tabindex positif moindre à l'élément suivant. L'exception est une valeur spéciale tabindex="0" signifie que l'élément sera toujours le dernier. Le tabindex=-1 signifie qu'un élément devient focalisable, mais la touche Tab le sautera toujours. Seule la méthode focus() fonctionnera

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