Code zum Bewegen des Cursors zum Ende des aktuellen Textes innerhalb des Eingabefeldes, anstatt zum Standardverhalten (Hervorheben des Textes).
Plugin-Format
jQuery.fn.putCursorAtEnd = function() {
return this.each(function() {
// Cache references
var $el = $(this),
el = this;
// Only focus if input isn't already
if (!$el.is(":focus")) {
$el.focus();
}
// If this function exists... (IE 9+)
if (el.setSelectionRange) {
// Double the length because Opera is inconsistent about whether a carriage return is one character or two.
var len = $el.val().length * 2;
// Timeout seems to be required for Blink
setTimeout(function() {
el.setSelectionRange(len, len);
}, 1);
} else {
// As a fallback, replace the contents with itself
// Doesn't work in Chrome, but Chrome supports setSelectionRange
$el.val($el.val());
}
// Scroll to the bottom, in case we're in a tall textarea
// (Necessary for Firefox and Chrome)
this.scrollTop = 999999;
});
};
Verwendung
var searchInput = $("#search");
searchInput
.putCursorAtEnd() // should be chainable
.on("focus", function() { // could be on any event
searchInput.putCursorAtEnd()
});
Demo
Siehe den Pen Cursor zum Ende von Textarea oder Eingabe bewegen von Chris Coyier (@chriscoyier) auf CodePen.
Ich glaube, ich vermisse etwas, da es sich genau wie jede andere Eingabe verhält. Was passiert?
http://cl.ly/QHRK
Bei mir passiert auch nichts, weder bei FF 30.0.
Nützlich für Eingabe- oder Textfelder mit vorab ausgefülltem Inhalt, den man beibehalten möchte. Der Aufruf von `focus()` wählt den vorhandenen Inhalt aus, die Verwendung dieses Plugins platziert den Cursor am Ende, sodass der Benutzer sofort mit der Eingabe beginnen kann, während der Inhalt erhalten bleibt.
Haben Sie das auf einer mobilen Web-App getestet, die mit Cordova erstellt wurde?
Vielen Dank für diesen großartigen Schnipsel!
Ich hatte einige Probleme mit angehängten Eingabeelementen, die einen Wert enthalten könnten, da
.focus()jeden vorbestimmten Wert auswählt. Dieser Schnipsel hat mir viel zusätzliche Arbeit erspart.Wäre es eine Idee,
$(this)zu cachen?Auch: Warum es Cursor nennen, wenn wir eigentlich den Caret manipulieren?
Das scheint bei FF nicht zu funktionieren. (Ich habe FF27)
Ist das nur mit CSS möglich?
Ich versuche, dieses Verhalten beim Fokussieren einer
<textarea>zu implementieren. Hat jemand das zum Laufen gebracht?Diejenigen, die Probleme mit diesem Code haben, sollten prüfen, welche anderen Ereignisse durch den DOM blubbern. Wenn Sie zum Beispiel versuchen, den Code aus dem Beispiel durch einen Pfeil-nach-oben-Tastendruck auszulösen, wird der Code ordnungsgemäß ausgeführt (und bewegt den Cursor zum Ende des Eingabefeldes), aber dann blubbert der Pfeil-nach-oben-Tastendruck zum Browser weiter (der ihn veranlasst, den Cursor zum Anfang des Eingabefeldes zu bewegen).
Testen Sie, ob dies Ihr Problem ist, indem Sie `preventDefault()` im Ereignis aufrufen, mit dem Sie den Beispielcode auslösen.
Ansonsten funktioniert dieser Code, wie Sie im CodePen-Beispiel sehen können, in den am weitesten verbreiteten Versionen von Chrome/Firefox/Safari/IE (Stand Mai 2015).
Funktioniert nicht bei FF 40
Funktioniert mit FF 41.0.2, Chrome 46.0.2490.71 m
Danke
Funktioniert mit Tizen Wearable. Danke!
Ich denke, dieser Link hat eine ziemlich kurze und prägnante Antwort (ich habe sie ausprobiert)
http://stackoverflow.com/questions/1056359/set-mouse-focus-and-move-cursor-to-end-of-input-using-jquery
Ich bin gespannt, was der obigen Lösung fehlt.
Danke
Dies funktioniert nur, wenn Sie den JS-Code nach dem HTML-Input-Tag referenzieren.
// Platziere den Cursor am Ende der Eingabe und fokussiere sie.
var val = $(‘input’).val();
input.removeAttr(‘value’).attr(‘value’, val).focus();
Platzieren Sie diesen Code in einem Skript-Tag vor dem schließenden `