Das letzte Beispiel in der focus()
Dokumentation von jQuery lautet
$('#id').focus()
sollte die Eingabe fokussieren (aktiv) machen. Ich kann das scheinbar nicht zum Laufen bringen.
Selbst in der Konsole auf dieser Site versuche ich es für das Suchfeld
$('input[name="q"]').focus()
und ich bekomme nichts. Irgendwelche Ideen?
focus()
. Weitere InformationenAntworten:
Das Beispiel, das Sie für die Fokussierung auf diese Site gegeben haben, funktioniert einwandfrei, solange Sie sich nicht auf die Konsole konzentrieren. Der Grund, warum das nicht funktioniert, ist einfach, dass es den Fokus nicht von der Entwicklungskonsole stiehlt. Wenn Sie den folgenden Code in Ihrer Konsole ausführen und anschließend schnell in Ihr Browserfenster klicken, wird das Suchfeld fokussiert:
Was Ihren anderen betrifft, so hat mich in der Vergangenheit nur die Reihenfolge der Ereignisse in Schwierigkeiten gebracht. Sie können focus () nicht für ein Element aufrufen, das nicht an das DOM angehängt wurde. Wurde das Element, auf das Sie sich konzentrieren möchten, bereits mit dem DOM verknüpft?
quelle
setTimeout
Lösen von Problemen in der Reihenfolge der Operationen macht es zu einem großen Problem, die Patooty aufrechtzuerhalten. Wenn ein Fehler auftritt, ist das Debuggen sehr schwierig. Wo immer Sie das Element in das DOM einfügen, sollte es dort aufrufen.focus()
.An anderer Stelle im Internet eine Lösung gefunden ...
funktioniert nicht.
funktionierte.
quelle
Einige der Antworten hier schlagen vor
setTimeout
, den Prozess der Fokussierung auf das Zielelement zu verzögern. Einer von ihnen erwähnt, dass sich das Ziel in einem modalen Dialog befindet. Ich kann die Richtigkeit dersetTimeout
Lösung nicht weiter kommentieren, ohne die genauen Einzelheiten zu wissen, wo sie verwendet wurde. Ich dachte jedoch, ich sollte hier eine Antwort geben, um Menschen zu helfen, die genau wie ich auf diesen Thread stoßenDie einfache Tatsache ist, dass Sie sich nicht auf ein Element konzentrieren können, das noch nicht sichtbar ist . Wenn Sie auf dieses Problem stoßen, stellen Sie sicher, dass das Ziel tatsächlich sichtbar ist, wenn versucht wird, es zu fokussieren. In meinem Fall habe ich etwas in diese Richtung getan
Das hat nicht funktioniert. Ich habe nur realisiert , was los war , als ich ausgeführt $ ( ‚# elementID‘). Focus () `von der Konsole , die tat Arbeit. Der Unterschied: In meinem Code über dem Ziel gibt es keine Gewissheit, dass das Ziel tatsächlich sichtbar ist, da die Animation möglicherweise nicht vollständig ist . Und da liegt der Hinweis
funktioniert wie erwartet. Auch ich hatte anfangs eine
setTimeout
Lösung gefunden und es hat auch funktioniert. Ein willkürlich gewähltes Zeitlimit führt jedoch dazu, dass die Lösung früher oder später unterbrochen wird, je nachdem, wie langsam das Host-Gerät den Prozess durchführt, um sicherzustellen, dass das Zielelement sichtbar ist.quelle
visibility:hidden
, wird es nicht fokussiert.Wenn Sie Bootstrap + Modal verwenden, hat dies bei mir funktioniert:
quelle
Nur für den Fall, dass jemand anderes über diese Frage stolpert und die gleiche Situation wie ich hat - ich habe versucht, den Fokus zu setzen, nachdem ich auf ein anderes Element geklickt habe, aber der Fokus schien nicht zu funktionieren. Es stellte sich heraus, dass ich nur eine brauchte
e.preventDefault();
- hier ein Beispiel:Dies half:
quelle
Mir ist klar, dass dies alt ist, aber ich bin heute darauf gestoßen. Keine der Antworten funktionierte für mich. Was ich fand, war setTimeout. Ich wollte, dass mein Fokus auf die Eingabe eines Modals gelegt wird, wobei setTimeout funktioniert. Hoffe das hilft!
quelle
setTimeout
eine schlechte Lösung ist. Sie können die Ausführungszeit auf dem Computer des Benutzers nicht garantieren, daher sind zeitabhängige Inhalte äußerst anfällig.Ich hatte auch dieses Problem. Die Lösung, die in meinem Fall funktioniert hat, war die Verwendung der tabindex-Eigenschaft für das HTML-Element.
Ich habe
ng-repeat
für einige li-Elemente in einer Liste verwendet und konnte mit .focus () den Fokus nicht auf das erste li setzen. Deshalb habe ich jedem li während der Schleife einfach das tabindex-Attribut hinzugefügt.also jetzt
<li ng-repeat="user in users track by $index" tabindex="{{$index+1}}"></li>
Der Index +1 war ab 0. Stellen Sie außerdem sicher, dass das Element im DOM vorhanden ist, bevor Sie die Funktion .focus () aufrufen
Ich hoffe das hilft.
quelle
Für diejenigen mit dem Problem, nicht zu arbeiten, weil Sie "$ (element) .show ()" verwendet haben. Ich habe es auf die nächste Weise gelöst:
Sie benötigen also keinen Timer, der nach Abschluss der Show-Methode ausgeführt wird.
quelle
slideDown()
,fadeIn()
usw.Fügen Sie eine Verzögerung vor dem Fokus hinzu (). 200 ms sind genug
quelle
Hatte dieses Problem gerade wieder und ob Sie es glauben oder nicht, alles was ich tun musste, war die Entwicklertools zu schließen. Anscheinend hat die Registerkarte "Konsole" die Fokuspriorität gegenüber dem Seiteninhalt.
quelle
Stellen Sie sicher, dass das Element und seine Eltern sichtbar sind. Sie können den Fokus nicht auf versteckte Elemente verwenden
quelle
ZUSÄTZLICHE LÖSUNG Hatte das gleiche Problem, bei dem focus () nicht zu funktionieren schien, aber schließlich stellte sich heraus, dass das Scrollen zur richtigen Position erforderlich war:
quelle
Für meinen Fall musste ich einen Registerkartenindex angeben (
-1
wenn nur per Skript fokussierbar)quelle