Ich habe den folgenden jQuery-Code (ähnlich dieser Frage ), der in Firefox und IE funktioniert, aber in Chrome und Safari fehlschlägt (keine Fehler, funktioniert einfach nicht). Irgendwelche Ideen für eine Problemumgehung?
$("#souper_fancy").focus(function() { $(this).select() });
Antworten:
Es ist das Ereignis onmouseup, das dazu führt, dass die Auswahl nicht mehr ausgewählt wird. Sie müssen also nur Folgendes hinzufügen:
quelle
quelle
Dies funktioniert gut für Elemente vom Typ input = "text". Was für ein Element ist #souper_fancy?
quelle
Wenn Sie nur die Standardeinstellung beim Mouseup verhindern, ist die Textauswahl jederzeit aktiviert. Das MOUSEUP-Ereignis ist dafür verantwortlich, die Textauswahl zu löschen. Indem Sie jedoch das Standardverhalten verhindern, können Sie die Auswahl des Textes mit der Maus nicht aufheben.
Um dies zu vermeiden und die Textauswahl wieder zum Laufen zu bringen, können Sie ein Flag auf FOCUS setzen, es aus MOUSEUP lesen und zurücksetzen, damit zukünftige MOUSEUP-Ereignisse wie erwartet funktionieren.
quelle
Während dies für die Auswahl in IE, Firefox, Chrome, Safari und Opera funktioniert, können Sie es nicht bearbeiten, indem Sie ein zweites Mal in Firefox, Chrome und Safari klicken. Nicht ganz sicher, aber ich denke, dies kann daran liegen, dass diese 3 Browser ein Fokusereignis erneut ausgeben, obwohl das Feld bereits fokussiert ist, sodass Sie den Cursor nie tatsächlich einfügen können (da Sie ihn erneut auswählen), während dies im IE der Fall ist und Opera scheint das nicht zu tun, so dass das Fokusereignis nicht erneut ausgelöst wurde und somit der Cursor eingefügt wird.
Ich habe in diesem Stack-Beitrag eine bessere Lösung gefunden , die dieses Problem nicht aufweist und in allen Browsern funktioniert.
quelle
Dies sollte auch in Chrom funktionieren:
quelle
Da bei Verwendung von setTimeout ein Flackern auftritt, gibt es eine andere ereignisbasierte Lösung. Auf diese Weise hängt das Ereignis 'focus' das Ereignis 'mouseup' an und der Ereignishandler löst sich wieder.
Verdrahten Sie dann das erste Ereignis
quelle
Verwenden Sie
setSelectionRange()
innerhalb eines Rückrufs, umrequestAnimationFrame()
:Verwenden
setSelectionRange()
Sie statt ,select()
daselect()
nicht funktioniert in der mobilen Safari (siehe Programmatically Auswahl Text in einem Eingabefeld auf iOS - Geräten (mobile Safari) ).Es ist notwendig, mit zu warten
requestAnimationFrame
bevor Sie den Text auswählen. Andernfalls wird das Element nach dem Aufrufen der Tastatur unter iOS nicht richtig angezeigt.Bei Verwendung ist
setSelectionRange()
es wichtig, den Eingabetyp auf zu setzentext
, da sonst in Chrome Ausnahmen ausgelöst werden können (siehe selectionStart / selectionEnd on input type = "number" in Chrome nicht mehr zulässig ).quelle
Wenn jemand wieder auf dieses Problem stößt, habe ich hier eine reine JS-Lösung bekommen, die (im Moment) auf allen Browsern inkl. Funktioniert. Handy, Mobiltelefon
(ohne setTimeout () funktioniert es nicht auf Safari, Mobile Safari und MS Edge)
quelle