Niektóre z odpowiedzi sugerują użycie w setTimeoutcelu opóźnienia procesu skupiania się na elemencie docelowym. Jeden z nich wspomina, że cel znajduje się wewnątrz okna dialogowego. Nie mogę dalej komentować poprawności setTimeoutrozwiązania, nie znając szczegółowych informacji, gdzie zostało użyte. Pomyślałem jednak, że powinienem udzielić tutaj odpowiedzi, aby pomóc ludziom, którzy natkną się na ten wątek, tak jak ja
Prosty fakt jest taki , że nie możesz skupić się na elemencie, który nie jest jeszcze widoczny . Jeśli napotkasz ten problem, upewnij się, że cel jest rzeczywiście widoczny podczas próby skupienia się na nim. W moim przypadku robiłem coś podobnego
$('#elementid').animate({left:0,duration:'slow'});
$('#elementid').focus();
To nie zadziałało. Ja tylko sobie sprawę, co się dzieje, kiedy wykonywane $ ( „# elementid”). Ostrości () `z konsoli, który zrobił pracę. Różnica - w moim kodzie nad celem nie ma pewności, że cel faktycznie będzie widoczny, ponieważ animacja może nie być kompletna . I tu jest wskazówka
$('#elementid').animate({left:0,duration:'slow',complete:focusFunction});
function focusFunction(){$('#elementid').focus();}
działa zgodnie z oczekiwaniami. Ja też początkowo wprowadziłem setTimeoutrozwiązanie i też zadziałało. Jednak arbitralnie wybrany limit czasu z pewnością zepsuje rozwiązanie wcześniej lub później, w zależności od tego, jak wolno urządzenie hosta wykonuje proces zapewniania, że element docelowy jest widoczny.