Ostatnim przykładem jQuery w focus()
dokumentacji państw
$('#id').focus()
powinien sprawić, że wejście będzie skoncentrowane (aktywne). Nie wydaje mi się, żeby to działało.
Nawet w konsoli na tej stronie próbuję ją znaleźć w polu wyszukiwania
$('input[name="q"]').focus()
i nic nie dostaję. Jakieś pomysły?
focus()
. Więcej informacjiOdpowiedzi:
Właściwie przykład, który podałeś, aby skupić się na tej stronie, działa dobrze, o ile nie jesteś skupiony na konsoli. Powodem, dla którego to nie działa, jest po prostu to, że nie kradnie ostrości z konsoli programisty. Jeśli uruchomisz następujący kod w konsoli, a następnie szybko klikniesz w oknie przeglądarki, zobaczysz, że ustawia on pole wyszukiwania:
Co do twojego drugiego, jedyną rzeczą, która sprawiała mi kłopoty w przeszłości, jest kolejność wydarzeń. Nie możesz wywołać focus () na elemencie, który nie został dołączony do DOM. Czy element, na którym chcesz się skupić, został już dołączony do DOM?
źródło
setTimeout
do rozwiązywania problemów związanych z kolejnością operacji sprawia, że utrzymanie ich jest ogromnym utrapieniem. Jeśli pojawi się błąd, to naprawdę trudno go debugować. Gdziekolwiek wstawiasz element do DOM, powinien.focus()
tam zadzwonić .Znalazłem rozwiązanie w innym miejscu w sieci ...
nie działał.
zadziałało.
źródło
Niektóre z odpowiedzi sugerują użycie w
setTimeout
celu 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ścisetTimeout
rozwią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 jaProsty 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
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
działa zgodnie z oczekiwaniami. Ja też początkowo wprowadziłem
setTimeout
rozwią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.źródło
visibility:hidden
- nie zostanie skupiony.jeśli używasz bootstrap + modal, to zadziałało dla mnie:
źródło
Na wypadek gdyby ktoś inny natknął się na to pytanie i miał taką samą sytuację jak ja - próbowałem ustawić fokus po kliknięciu na inny element, ale fokus nie wydawał się działać. Okazuje się, że potrzebowałem tylko
e.preventDefault();
- oto przykład:Pomogło to:
źródło
Zdaję sobie sprawę, że to jest stare, ale natrafiłem na to dzisiaj. Żadna z odpowiedzi nie zadziałała dla mnie, ale okazało się, że zadziałało, to ustawiony czas. Chciałem, aby skupiłem się na polu wejściowym modalu, używając setTimeout działał. Mam nadzieję że to pomoże!
źródło
setTimeout
jest złym rozwiązaniem. Nie możesz zagwarantować czasu wykonania na komputerze użytkownika, więc rzeczy zależne od czasu są niezwykle delikatne.Ja też miałem ten problem. Rozwiązaniem, które zadziałało w moim przypadku, było użycie właściwości tabindex w elemencie HTML.
I był przy użyciu
ng-repeat
niektórych elementów li wewnątrz listy, a ja nie byłem w stanie przynieść ostrość na pierwszym li użyciu .focus (), więc po prostu dodaje się do każdego atrybutu tabindex li podczas pętli.więc teraz
<li ng-repeat="user in users track by $index" tabindex="{{$index+1}}"></li>
To +1 było indeksem zaczynającym się od 0. Upewnij się również, że element jest obecny w DOM przed wywołaniem funkcji .focus ()
Mam nadzieję, że to pomoże.
źródło
Dla tych, którzy mają problem z niedziałaniem, ponieważ użyłeś "$ (element) .show ()". Rozwiązałem to w następujący sposób:
Więc nie potrzebujesz licznika czasu, zostanie on wykonany po zakończeniu metody show.
źródło
slideDown()
,fadeIn()
itpDodaj opóźnienie przed aktywowaniem (). 200 ms wystarczy
źródło
Miałem ten problem ponownie teraz i wierz lub nie, wszystko, co musiałem zrobić, to zamknąć narzędzia programistyczne. Najwyraźniej zakładka Console ma pierwszeństwo przed zawartością strony.
źródło
Upewnij się, że element i jego elementy nadrzędne są widoczne. Nie możesz skupić się na ukrytych elementach
źródło
DODATKOWE ROZWIĄZANIE Wystąpił ten sam problem, w którym funkcja focus () wydawała się nie działać, ale ostatecznie okazało się, że potrzebne było przewijanie do właściwej pozycji:
źródło
W moim przypadku musiałem określić indeks zakładki (
-1
jeśli można go ustawić tylko za pomocą skryptu)źródło