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 der setTimeout
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ßen
Die 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
$('#elementid').animate({left:0,duration:'slow'});
$('#elementid').focus();
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
$('#elementid').animate({left:0,duration:'slow',complete:focusFunction});
function focusFunction(){$('#elementid').focus();}
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.