it-swarm.com.de

Was sind einige Gründe, warum jquery .focus () nicht funktioniert?

Einige Gedanken sind, dass das ELEMENT_ID.focus () sich in Divs befindet, die zu bestimmten Zeiten verborgen sind. 

Dies sollte ein leicht zu lösendes Problem sein - aber ich habe Schwierigkeiten :(

*** Code funktioniert gut - das Textfeld wird beim Laden der Seite nicht fokussiert.

SCHRITT1 [Gelöst] JAVASCRIPT:

$("#goal-input").focus();

$('#goal-input').keypress(function(event){
 var keycode = (event.keyCode ? event.keyCode : event.which);
  if(keycode == '13') {
etc, etc, etc
}

HTML

<input type="text" id="goal-input" name="goal" />

[SCHRITT2] JAVASCRIPT:

 if (goal) {
          step1.fadeOut('fast', function() {
          step1.hide();
          step2.fadeIn('fast');

etc, etc

HTML:

  <div id="step-2">
        <div class="notifications">
        </div>
        <input type="text" id="name"   name="name" placeholder="Name" />
               <script type="text/javascript">
              $(function(){
              $("#name").focus();
              });
            </script>

Warum funktioniert Schritt 2 nicht? :(

29
dngoo

Sie müssen den Code entweder unter den HTML-Code schreiben oder laden, wenn Sie das Dokumentladeereignis verwenden:

<input type="text" id="goal-input" name="goal" />
<script type="text/javascript">
$(function(){
    $("#goal-input").focus();
});
</script>

Update:

Durch das Umschalten von divs wird das Dokumentladeereignis nicht ausgelöst, da bereits alles geladen wurde. Sie müssen es konzentrieren, wenn Sie div wechseln:

if (goal) {
      step1.fadeOut('fast', function() {
          step1.hide();
          step2.fadeIn('fast', function() {  
              $("#name").focus();
          });
      });
}
15
jgauffin

Ich hatte Probleme, den Fokus auf ein Element (eine Formulareingabe) auszulösen, das in die Seite überging. Ich fand es fixierbar, indem ich das focus -Ereignis in einem setTimeout ohne Verzögerung aufrief. So wie ich es verstehe (von zB dieser Antwort ), wird die Funktion so lange verzögert, bis die aktuelle Ausführungswarteschlange abgeschlossen ist. In diesem Fall wird also das Fokusereignis so lange verzögert, bis der Übergang abgeschlossen ist.

setTimeout(function(){
    $('#goal-input').focus();
});
33
Nick F

Vergessen Sie nicht, dass ein Eingabefeld zuerst sichtbar sein muss, danach können Sie es fokussieren.

$("#elementid").show();
$("#elementid input[type=text]").focus();
7
n0mad

Versuchen Sie etwas Ähnliches, wenn Sie den Fokus auf diese Weise anwenden, wenn das Element ausgeblendet ist. Es wird kein Fehler ausgegeben:

$("#elementid").filter(':visible').focus();

Es kann sinnvoller sein, das Element sichtbar zu machen, obwohl dazu Code benötigt wird, der für Ihr Layout spezifisch ist.

4
Kevin B

Ich habe festgestellt, dass focus nicht funktioniert, wenn versucht wird, einen Fokus auf ein Textelement (z. B. einen Hinweis div) zu erhalten, funktioniert jedoch, wenn der Fokus auf Eingabefeldern liegt. 

3
Martin

Mit .focus() können nur "tastaturfokussierbare" Elemente fokussiert werden. div sollen nicht von Haus aus fokussierbar sein. Dazu müssen Sie die Attribute tabindex="0" Hinzufügen. input, button, a etc ... sind von Haus aus fokussierbar.

1
WegPast

Das gelöst !!!

setTimeout(function(){
    $("#name").filter(':visible').focus();
}, 500);

Sie können die Zeit entsprechend anpassen.

0
Mohammed Rishad