Was ist der beste Weg (und ich nehme den einfachsten Weg an), den Cursor am Ende des Textes in einem Eingabetextelement über JavaScript zu platzieren - nachdem der Fokus auf das Element gesetzt wurde?
javascript
Erdnuss
quelle
quelle
Es gibt eine einfache Möglichkeit, es in den meisten Browsern zum Laufen zu bringen.
Aufgrund der * Macken einiger Browser sieht eine umfassendere Antwort jedoch eher so aus
Verwenden von jQuery (um den Listener festzulegen, aber sonst ist es nicht erforderlich)
Code-Snippet anzeigen
Verwenden von Vanilla JS (Ausleihfunktion
addEvent
aus dieser Antwort )Code-Snippet anzeigen
Macken
Chrome hat eine merkwürdige Eigenart, bei der das Fokusereignis ausgelöst wird, bevor der Cursor in das Feld bewegt wird. was meine einfache Lösung vermasselt. Zwei Optionen, um dies zu beheben:
focus
bis ändernmouseup
. Dies wäre für den Benutzer ziemlich ärgerlich, wenn Sie nicht den Fokus behalten würden. Ich bin nicht wirklich in eine dieser Optionen verliebt.Außerdem wies @vladkras darauf hin, dass einige ältere Versionen von Opera die Länge falsch berechnen, wenn Leerzeichen vorhanden sind. Hierfür können Sie eine große Zahl verwenden, die größer als Ihre Zeichenfolge sein sollte.
quelle
this.selectionStart = this.selectionEnd = 0;
Dadurch sollte der Fokus vor dem ersten Buchstaben des Eingabefelds verschoben werden. Vielmehr ändert sich beim Debuggen nicht einmal der Wert von selectionEnd und selectionStart! Und auch nicht auf den ersten Charakter verschieben !!selectionStart
und einelength
kleinere Anzahl von Leerzeichen zurückgibt . Deshalb benutze ich10000
oder eine andere ausreichend große Zahl anstelle vonthis.value.length
(getestet auf IE8 und IE11)Versuchen Sie dies, es hat bei mir funktioniert:
Damit sich der Cursor zum Ende bewegt, muss die Eingabe zuerst fokussiert sein. Wenn der Wert geändert wird, wird das Ende erreicht. Wenn Sie .value auf den gleichen Wert einstellen, ändert sich dies in Chrome nicht.
quelle
this.
in den Zeilen 2, 3 und 4 vor den Eingang stellen? Wir wissen bereits, dass diesinput
das Eingabeelement ist. Die Verwendungthis
scheint überflüssig. Ansonsten gute Lösung!$input.focus().val($input.val());
Nachdem ich ein bisschen damit herumgehackt hatte, fand ich, dass der beste Weg war, die
setSelectionRange
Funktion zu verwenden, wenn der Browser sie unterstützt. Wenn nicht, verwenden Sie wieder die Methode in Mike Berrows Antwort (dh ersetzen Sie den Wert durch sich selbst).Ich stelle auch
scrollTop
einen hohen Wert ein, falls wir vertikal scrollbar sindtextarea
. (Die Verwendung eines willkürlich hohen Werts scheint zuverlässiger zu sein als$(this).height()
in Firefox und Chrome.)Ich habe es als jQuery-Plugin gemacht. (Wenn Sie jQuery nicht verwenden, können Sie das Wesentliche trotzdem leicht genug verstehen.)
Ich habe in IE6, IE7, IE8, Firefox 3.5.5, Google Chrome 3.0, Safari 4.0.4 und Opera 10.00 getestet.
Es ist auf jquery.com als PutCursorAtEnd-Plugin verfügbar . Der Code für Release 1.0 lautet wie folgt:
quelle
Diese Funktion funktioniert für mich in IE9, Firefox 6.x und Opera 11.x.
quelle
SCRIPT16389: Unspecified error.
Ich habe folgendes mit ziemlich großem Erfolg in Chrom versucht
Kurzer Überblick:
Es nimmt jedes Eingabefeld mit dem Klassenfokus darauf, speichert dann den alten Wert des Eingabefelds in einer Variablen und wendet anschließend die leere Zeichenfolge auf das Eingabefeld an.
Dann wartet es 1 Millisekunde und gibt den alten Wert wieder ein.
quelle
Es ist 2019 und keine der oben genannten Methoden hat bei mir funktioniert, aber diese hat von https://css-tricks.com/snippets/javascript/move-cursor-to-end-of-input/ übernommen.
quelle
el.focus()
in der,else if
so dass es in einigen Fällen nicht funktionierte. Ich habe überprüft, dass dies jetzt in Chrom und (Schauder) IE funktioniertEinfach. Stellen Sie beim Bearbeiten oder Ändern von Werten zuerst den Fokus und dann den Wert ein.
quelle
Trotzdem wird die Zwischenvariable benötigt (siehe var val =), sonst verhält sich der Cursor seltsam, wir brauchen sie am Ende.
quelle
el.setSelectionRange(-1, -1);
https://codesandbox.io/s/peaceful-bash-x2mti
https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange
In anderen js-Methoden
-1
bedeutet normalerweise (bis zum) letzten Zeichen. Dies ist auch bei diesem Fall der Fall, aber ich konnte dieses Verhalten in den Dokumenten nicht explizit erwähnen.quelle
Für alle Browser für alle Fälle:
Zeitüberschreitung erforderlich, wenn Sie den Cursor vom onFocus-Ereignishandler bewegen müssen
quelle
Ich mag die akzeptierte Antwort sehr, aber sie funktioniert in Chrome nicht mehr. In Chrome muss sich der Eingabewert ändern, damit der Cursor das Ende erreicht. Die Lösung lautet wie folgt:
quelle
In jQuery ist das so
quelle
Dieses Problem ist interessant. Das Verwirrendste daran ist, dass keine Lösung, die ich gefunden habe, das Problem vollständig gelöst hat.
+++++++ LÖSUNG +++++++
Sie benötigen eine JS-Funktion wie folgt:
Sie müssen diesen Typen in den Onfocus- und Onclick-Ereignissen anrufen.
ES FUNKTIONIERT AN ALLEN GERÄTEN UND BROWSERS !!!!
quelle
Ich habe gerade festgestellt, dass unter iOS die Einstellungseigenschaft
textarea.textContent
den Cursor jedes Mal am Ende des Textes im Textbereichselement platziert. Das Verhalten war ein Fehler in meiner App, scheint aber etwas zu sein, das Sie absichtlich verwenden könnten.quelle
quelle
Nehmen Sie einige der Antworten .. machen Sie eine einzeilige Abfrage.
quelle
Wenn das Eingabefeld nur einen statischen Standardwert benötigt, mache ich dies normalerweise mit jQuery:
Dies scheint in allen Browsern zu funktionieren.
quelle
Obwohl dies eine alte Frage mit vielen Antworten sein mag, bin ich auf ein ähnliches Problem gestoßen, und keine der Antworten entsprach genau meinen Wünschen und / oder wurde schlecht erklärt. Das Problem mit den Eigenschaften selectionStart und selectionEnd besteht darin, dass sie für die Eingabetypnummer nicht vorhanden sind (während die Frage nach dem Texttyp gestellt wurde, kann dies meiner Meinung nach anderen helfen, die möglicherweise andere Eingabetypen haben, auf die sie sich konzentrieren müssen). Wenn Sie also nicht wissen, ob der Eingabetyp, auf den sich die Funktion konzentriert, eine Typennummer ist oder nicht, können Sie diese Lösung nicht verwenden.
Die Lösung, die browserübergreifend und für alle Eingabetypen funktioniert, ist recht einfach:
Auf diese Weise befindet sich der Cursor am Ende des Eingabeelements.
Alles, was Sie tun würden, ist so etwas (mit jquery, vorausgesetzt, der Element-Selektor, den Sie fokussieren möchten, ist über das Datenattribut 'data-focus-element' des angeklickten Elements zugänglich und die Funktion wird ausgeführt, nachdem Sie auf '.foo' geklickt haben. Element):
Warum funktioniert das? Wenn einfach .focus () aufgerufen wird, wird der Fokus am Anfang des Eingabeelements hinzugefügt (was hier das Kernproblem ist), wobei die Tatsache ignoriert wird, dass das Eingabeelement bereits einen Wert enthält. Wenn jedoch der Wert einer Eingabe geändert wird, wird der Cursor automatisch am Ende des Werts innerhalb des Eingabeelements platziert. Wenn Sie also den Wert mit demselben Wert überschreiben, der zuvor in die Eingabe eingegeben wurde, bleibt der Wert unberührt, der Cursor bewegt sich jedoch zum Ende.
quelle
Versuchen Sie, dass dies mit Vanilla JavaScript funktioniert.
In Js
quelle
Setzen Sie den Cursor, wenn Sie auf den Textbereich bis zum Ende des Textes klicken ... Variation dieses Codes ist ... AUCH funktioniert! für Firefox, IE, Safari, Chrome ..
Im serverseitigen Code:
In Javascript:
quelle
Wenn Sie zuerst den Wert und dann den Fokus einstellen, erscheint der Cursor immer am Ende.
Hier ist die Geige zum Testen von https://jsfiddle.net/5on50caf/1/
quelle
Ich wollte den Cursor an das Ende eines "div" -Elements setzen, wobei contenteditable = true ist, und habe eine Lösung mit Xeoncross-Code erhalten :
Und diese Funktion zaubert:
Funktioniert gut für die meisten Browser. Bitte überprüfen Sie es. Dieser Code setzt Text und setzt den Fokus am Ende des Textes im div-Element (kein Eingabeelement).
https://jsfiddle.net/Xeoncross/4tUDk/
Danke, Xeoncross
quelle
Ich hatte auch das gleiche Problem. Endlich wird das für mich funktionieren:
So können wir das nennen:
Es funktioniert für mich in Safari, IE, Chrome, Mozilla. Auf Mobilgeräten habe ich das nicht ausprobiert.
quelle
Überprüfen Sie diese Lösung!
quelle
Super einfach (möglicherweise müssen Sie sich auf das Eingabeelement konzentrieren)
quelle
Ich habe die Vorschläge schon einmal ausprobiert, aber keiner hat für mich funktioniert (sie wurden in Chrome getestet), also habe ich meinen eigenen Code geschrieben - und er funktioniert gut in Firefox, IE, Safari, Chrome ...
Im Textbereich:
In Javascript:
quelle
Hier ist eine jsFiddle-Demo meiner Antwort. Die Demo verwendet CoffeeScript, aber Sie können es in einfaches JavaScript konvertieren bei Bedarf in .
Der wichtige Teil in JavaScript:
Ich poste diese Antwort, weil ich sie bereits für jemanden geschrieben habe, der dieselbe Frage hatte. Diese Antwort deckt nicht so viele Randfälle ab wie die Top-Antworten hier, funktioniert aber für mich und enthält eine jsFiddle-Demo, mit der Sie spielen können.
Hier ist der Code aus der jsFiddle, sodass diese Antwort auch dann erhalten bleibt, wenn die jsFiddle verschwindet:
quelle
Versuchen Sie den folgenden Code:
quelle
setSelectionRange
Ansatz ist sicherlich viel effizienter, wenn / wo unterstützt.Ich antworte zwar zu spät, aber für zukünftige Fragen wird es hilfreich sein. Und es funktioniert auch in
contenteditable
div.Von wo aus müssen Sie am Ende den Fokus setzen; schreibe diesen Code-
Und die Funktion ist -
quelle