Fokus-Eingabefeld beim Laden


95

Wie kann der Cursor beim Laden der Seite auf ein bestimmtes Eingabefeld fokussiert werden?

Ist es möglich, auch den anfänglichen Textwert beizubehalten und den Cursor am Ende der Eingabe zu platzieren?

<input type="text"  size="25" id="myinputbox" class="input-text" name="input2" value = "initial text" />

Antworten:


170

Ihre Frage besteht aus zwei Teilen.

1) Wie fokussiere ich eine Eingabe auf das Laden von Seiten?

Sie können das autofocusAttribut einfach zur Eingabe hinzufügen .

<input id="myinputbox" type="text" autofocus>

Dies wird jedoch möglicherweise nicht in allen Browsern unterstützt, sodass wir Javascript verwenden können.

window.onload = function() {
  var input = document.getElementById("myinputbox").focus();
}

2) Wie platziere ich den Cursor am Ende des Eingabetextes?

Hier ist eine Nicht-jQuery-Lösung mit geliehenem Code aus einer anderen SO-Antwort .

function placeCursorAtEnd() {
  if (this.setSelectionRange) {
    // Double the length because Opera is inconsistent about 
    // whether a carriage return is one character or two.
    var len = this.value.length * 2;
    this.setSelectionRange(len, len);
  } else {
    // This might work for browsers without setSelectionRange support.
    this.value = this.value;
  }

  if (this.nodeName === "TEXTAREA") {
    // This will scroll a textarea to the bottom if needed
    this.scrollTop = 999999;
  }
};

window.onload = function() {
  var input = document.getElementById("myinputbox");

  if (obj.addEventListener) {
    obj.addEventListener("focus", placeCursorAtEnd, false);
  } else if (obj.attachEvent) {
    obj.attachEvent('onfocus', placeCursorAtEnd);
  }

  input.focus();
}

Hier ist ein Beispiel, wie ich dies mit jQuery erreichen würde.

<input type="text" autofocus>

<script>
$(function() {
  $("[autofocus]").on("focus", function() {
    if (this.setSelectionRange) {
      var len = this.value.length * 2;
      this.setSelectionRange(len, len);
    } else {
      this.value = this.value;
    }
    this.scrollTop = 999999;
  }).focus();
});
</script>

3
Der erste vorgeschlagene Codeblock platziert den Cursor tatsächlich auch am Ende des vorhandenen Werts. Er funktioniert einwandfrei. Ich schätze Ihre Hilfe.
Codex73

46

Nur ein Kopf hoch - Sie können dies jetzt mit HTML5 ohne JavaScript für Browser tun, die dies unterstützen:

<input type="text" autofocus>

Sie möchten wahrscheinlich damit beginnen und mit JavaScript darauf aufbauen, um älteren Browsern einen Fallback zu bieten.


Gut zu wissen, bewegt dies den Cursor bereits an die letzte Position im Eingabefeld?
Camilo Díaz Repka

1
Ich glaube nicht, dass @ Codex73 versucht, das zu erreichen, was das Platzhalterattribut in HTML5 bewirkt. Es hört sich so an, als ob er möchte, dass der Cursor automatisch am Ende des aktuell in der Eingabe befindlichen Werts positioniert wird.
Jessegavin

2
Sie haben Recht, dies ist keine vollständige Lösung. Dies löst jedoch einige Probleme (Onload-Autofokus und Platzhaltertext).
David Calhoun

Beachten Sie, dass Safari unter iOS dies ab 1/2019
sporker


3
function focusOnMyInputBox(){                                 
    document.getElementById("myinputbox").focus();
}

<body onLoad="focusOnMyInputBox();">

<input type="text"  size="25" id="myinputbox" class="input-text" name="input2" onfocus="this.value = this.value;" value = "initial text">

2

Eine tragbare Möglichkeit hierfür ist die Verwendung einer benutzerdefinierten Funktion (zur Behandlung von Browserunterschieden) wie dieser .

Richten Sie dann einen Handler für das onloadam Ende Ihres <body>Tags ein, wie Jessegavin schrieb:

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

1

Funktioniert gut...

window.onload = function() {
  var input = document.getElementById("myinputbox").focus();
}

1

sehr einfache einzeilige Lösung:

<body onLoad="document.getElementById('myinputbox').focus();">


0

Wenn Sie aus irgendeinem Grund nicht zum BODY-Tag hinzufügen können, können Sie dies NACH dem Formular hinzufügen:

<SCRIPT type="text/javascript">
    document.yourFormName.yourFieldName.focus();
</SCRIPT>

0

Versuchen:

Javascript Pure:

[elem][n].style.visibility='visible';
[elem][n].focus();

Jquery:

[elem].filter(':visible').focus();

0

Fügen Sie dies oben auf Ihrem js hinzu

var input = $('#myinputbox');

input.focus();

Oder zu HTML

<script>
    var input = $('#myinputbox');

    input.focus();
</script>
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.