Ich verwende diesen Code, um zu versuchen, den gesamten Text im Feld auszuwählen, wenn sich ein Benutzer auf das Feld konzentriert. Was passiert ist, es wählt alle für eine Sekunde aus, dann ist es nicht ausgewählt und der Tippcursor bleibt dort, wo ich geklickt habe ...
$("input[type=text]").focus(function() {
$(this).select();
});
Ich möchte, dass alles ausgewählt bleibt.
Antworten:
Versuchen Sie es mit
click
anstelle vonfocus
. Es scheint sowohl für Maus- als auch für Schlüsselereignisse zu funktionieren (zumindest auf Chrome / Mac):jQuery <Version 1.7:
jQuery Version 1.7+:
Hier ist eine Demo
quelle
Ich denke, was passiert, ist Folgendes:
Eine Problemumgehung besteht möglicherweise darin, select () asynchron aufzurufen, sodass es vollständig nach focus () ausgeführt wird:
quelle
this
ist in solchen Bereichen etwas unerwartet. Ich werde den Code aktualisieren.Ich denke, das ist eine bessere Lösung. Im Gegensatz zur einfachen Auswahl in einem Onclick-Ereignis wird die Auswahl / Bearbeitung von Text mit der Maus nicht verhindert. Es funktioniert mit den wichtigsten Rendering-Engines, einschließlich IE8.
http://jsfiddle.net/25Mab/9/
quelle
select()
scheint jedoch zu funktionieren.$('input[autofocus]').select();
Hier gibt es einige anständige Antworten und @ user2072367 ist mein Favorit, aber es hat ein unerwartetes Ergebnis, wenn Sie sich eher über die Registerkarte als über den Klick konzentrieren. (unerwartetes Ergebnis: Um Text nach dem Fokussieren über die Registerkarte normal auszuwählen, müssen Sie ein weiteres Mal klicken.)
Diese Geige behebt diesen kleinen Fehler und speichert $ (this) zusätzlich in einer Variablen, um eine redundante DOM-Auswahl zu vermeiden. Hör zu! (:
Getestet in IE> 8
quelle
Nach sorgfältiger Prüfung schlage ich dies als weitaus sauberere Lösung in diesem Thread vor:
Demo in jsFiddle
Das Problem:
Hier eine kleine Erklärung:
Schauen wir uns zunächst die Reihenfolge der Ereignisse an, wenn Sie mit der Maus oder der Registerkarte in ein Feld fahren.
Wir können alle relevanten Ereignisse wie folgt protokollieren:
Einige Browser versuchen, den Cursor während der Ereignisse
mouseup
oder zu positionierenclick
. Dies ist sinnvoll, da Sie das Caret möglicherweise an einer Position starten und ziehen möchten, um Text hervorzuheben. Es kann keine Bezeichnung für die Caret-Position geben, bis Sie die Maus tatsächlich angehoben haben. Funktionen, die damit umgehenfocus
, reagieren also zu früh, sodass der Browser Ihre Positionierung überschreiben kann.Aber das Problem ist, dass wir wirklich mit dem Fokusereignis umgehen wollen. Es zeigt uns das erste Mal, dass jemand das Feld betreten hat. Nach diesem Zeitpunkt möchten wir das Benutzerauswahlverhalten nicht mehr überschreiben.
Die Lösung:
Stattdessen
focus
können wir im Ereignishandler schnell Listener für die Ereignisseclick
(Click-In) undkeyup
(Tab-In) anhängen, die ausgelöst werden sollen.Wir wollen das Event nur einmal auslösen. Wir könnten verwenden
.one("click keyup)
, aber dies würde den Ereignishandler einmal für jeden Ereignistyp aufrufen . Stattdessen rufen wir unsere Funktion auf, sobald entweder Mouseup oder Keyup gedrückt wird. Als erstes entfernen wir die Handler für beide. Auf diese Weise spielt es keine Rolle, ob wir Registerkarten oder Mauszeiger verwenden. Die Funktion sollte genau einmal ausgeführt werden.Jetzt können wir anrufen,
select()
nachdem der Browser seine Auswahl getroffen hat, sodass wir das Standardverhalten sicher überschreiben können.Zum zusätzlichen Schutz können wir den Funktionen und Funktionen Ereignis-Namespaces hinzufügen, damit die Methode keine anderen Listener entfernt, die möglicherweise im Spiel sind.
mouseup
keyup
.off()
Getestet in IE 10+, FF 28+ und Chrome 35+
Wenn Sie jQuery um eine Funktion
once
erweitern möchten, die aufgerufen wird und bei einer beliebigen Anzahl von Ereignissen genau einmal ausgelöst wird :Dann können Sie den Code folgendermaßen weiter vereinfachen:
Demo in Geige
quelle
click
Fall übernehmen, der weiter unten in der Pipeline liegt alsmouseup
. Da wir das Ende der Auswahl so spät wie möglich behandeln möchten, um die größtmögliche Chance zu haben, den Browser zu überschreiben, sollte die Verwendung von Klick anstelle von Mouseup den Trick tun. Getestet in FF, Chrome und IE.one
schneidet es nicht als "Der Handler wird einmal pro Element und Ereignistyp ausgeführt . Er schaltet das Ereignis, das ihn ausgelöst hat, automatisch aus, aber das andere bleibt weiterhin bestehen undoff
kümmert sich trotzdem um beide. Siehe meine Frage: Funktion, die genau einmal für eine beliebige Anzahl von EreignissenDies würde die Arbeit erledigen und das Problem vermeiden, dass Sie einen Teil des Textes nicht mehr mit der Maus auswählen können.
quelle
Diese Version funktioniert unter iOS und behebt auch das Standard-Drag-to-Select unter Windows Chrome
http://jsfiddle.net/Zx2sc/2/
quelle
Das Problem bei den meisten dieser Lösungen ist, dass sie beim Ändern der Cursorposition innerhalb des Eingabefelds nicht richtig funktionieren.
Das
onmouseup
Ereignis ändert die Cursorposition innerhalb des Feldes, das danach ausgelöst wirdonfocus
(zumindest innerhalb von Chrome und FF). Wenn Sie das bedingungslos verwerfen,mouseup
kann der Benutzer die Cursorposition nicht mit der Maus ändern.Der Code verhindert bedingt das
mouseup
Standardverhalten, wenn das Feld derzeit keinen Fokus hat. Es funktioniert für diese Fälle:Ich habe dies in Chrome 31, FF 26 und IE 11 getestet.
quelle
Beim Lesen dieses Threads eine großartige Lösung gefunden
quelle
Ich komme aus Ende 2016 und dieser Code funktioniert nur in neueren Versionen von jquery (in diesem Fall jquery-2.1.3.js).
quelle
Bei Verwendung von FF 16.0.2 und JQuery 1.8.3 funktionierte der gesamte Code in der Antwort nicht.
Ich benutze solchen Code und arbeite.
quelle
$("input[type=text]").on('click', function () { $(this).focus.select(); })
dass der Fokus und die Auswahl erfolgen, wenn der Benutzer auf das Feld klickt, da sie ausgeführt werden, wenn der Benutzer auf das Feld klickt. Ohne den Event-Handler beantwortet der Code die Frage nicht, daher die Abwertung und der Kommentar. Grundsätzlich haben Sie den Teil "Der gesamte aktuelle Text ist ausgewählt", aber nicht den Teil "Wenn er das Feld auswählt".Verwenden Sie clearTimeout für mehr Sicherheit, wenn Sie schnell zwischen zwei Eingängen wechseln. ClearTimeout bereinigt das alte Timeout ...
quelle
Funktioniert hervorragend mit nativem JavaScript
select()
.oder allgemein:
quelle
Oder Sie können einfach
<input onclick="select()">
Works perfect verwenden.quelle
Sie können einfachen Code verwenden:
quelle
quelle
$.ready
ist nicht korrekt. Sie müssen eine Funktion an sie übergeben, damit sie verzögert wird,attr
bis das Dokument fertig ist. Sie tun es sofort und übergeben dann die Elementsammlung an$.ready
.addEventListener
.Ich
requestAnimationFrame()
springe immer über interne Post-Event-Mechanismen und das funktioniert perfekt in Firefox. Nicht in Chrome getestet.quelle