Co to jest rozwiązanie Vanilla JS lub jQuery, które wybiera całą zawartość pola tekstowego, gdy pole tekstowe zostanie aktywowane?
javascript
jquery
user-interface
Jon Erickson
źródło
źródło
Odpowiedzi:
źródło
źródło
onmouseup="return false;"
jeśli chcesz, aby użytkownik mógł swobodnie zaznaczać i edytować tekst po skupieniu się w polu tekstowym. Za pomocą tego kodu tekst zostanie zablokowany w sytuacji „zaznacz wszystko”, a użytkownik nie będzie mógł go edytować, chyba że użytkownik wpisze nowy tekst lub użyje klawiszy strzałek, aby się poruszać. Szczerze mówiąc, wydaje się to dziwnym zachowaniem i nie miałoby sensu, chyba że pole tekstowe ma być trwale nieedytowalne (a zatem wyłączone).onmouseup="return false;"
jeśli chcesz, aby wybór następował po pierwszym kliknięciu lub kliknięciu przez użytkownika . I +1 za waniliowy javascript!źródło
źródło
mouseup
zdarzeniu: „gdy kursor znajdzie się w polu, kliknięcie gdzieś w zaznaczonym tekście, aby ustawić kursor tam, nie działa; kliknięcia są skutecznie wyłączone. w sytuacjach, w których zaznaczenie całego tekstu jest pożądane, prawdopodobnie jest to mniejsze zło ”.jQuery nie jest JavaScriptem, który w niektórych przypadkach jest łatwiejszy w użyciu.
Spójrz na ten przykład:
Źródło: CSS Tricks , MDN
źródło
To nie jest tylko problem z Chrome / Safari, doświadczyłem dość podobnego zachowania z Firefoksem 18.0.1. Zabawne jest to, że na MSIE tak się nie dzieje! Problemem jest tutaj pierwsze zdarzenie mouseup , które wymusza odznaczenie treści wejściowej, więc po prostu zignoruj pierwsze wystąpienie.
Podejście timeOut powoduje dziwne zachowanie, a blokując każde zdarzenie myszy, nie można usunąć zaznaczenia, klikając ponownie element wejściowy.
źródło
HTML:
Za pomocą JS:
Za pomocą JQuery:
Za pomocą React JS:
W odpowiednim składniku wewnątrz funkcji renderowania -
źródło
onFocus={(e) => e.target.select()}
moim rozwiązaniem jest użycie limitu czasu. Wygląda na to, że działa dobrze
źródło
Działa to również na iOS:
https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/select
źródło
Wiem, że kod wbudowany jest złym stylem, ale nie chciałem umieszczać go w pliku .js. Działa bez jQuery!
źródło
Odpowiedzi tutaj pomogły mi do pewnego momentu, ale miałem problem z polami wejściowymi Numer HTML5, gdy kliknąłem przyciski góra / dół w Chrome.
Jeśli klikniesz jeden z przycisków i opuścisz mysz nad przyciskiem, liczba będzie się zmieniać tak, jakbyś przytrzymywał przycisk myszy, ponieważ upuszczanie myszy było wyrzucane.
Rozwiązałem ten problem, usuwając moduł obsługi myszy po jego uruchomieniu, jak poniżej:
Mam nadzieję, że to pomoże ludziom w przyszłości ...
źródło
mouseup
dla tekstowych pól wejściowych i nienumber
s. Ten problem nie powinien zatem nadejśćTo zadziała, spróbuj tego -
Działa w Safari / IE 9 i Chrome, ale nie miałem okazji przetestować w Firefoksie.
źródło
Wiem, że jest tu już wiele odpowiedzi - ale jak dotąd tej brakuje; rozwiązanie, które działa również z treściami generowanymi przez ajax:
źródło
Byłem w stanie nieco poprawić odpowiedź Zacha, wprowadzając kilka wywołań funkcji. Problem z tą odpowiedzią polega na tym, że całkowicie wyłącza onMouseUp, uniemożliwiając w ten sposób klikanie w polu tekstowym, gdy jest ono aktywne.
Oto mój kod:
To niewielka poprawa w stosunku do odpowiedzi Zacha. Działa idealnie w IE, w ogóle nie działa w Chrome i działa z naprzemiennym sukcesem w FireFox (dosłownie za każdym razem). Jeśli ktoś ma pomysł, jak sprawić, by działał niezawodnie w FF lub Chrome, udostępnij.
W każdym razie pomyślałem, że podzielę się, co w mojej mocy, aby uczynić to trochę przyjemniejszym.
źródło
onMouseUp=""
ionMouseDown=""
nie są poprawne standardowy w3. Powinny byćonmouseup=""
ionmousedown=""
. Podobnie jak w przypadku innych atrybutów HTML, powinny być pisane małymi literami, a nie wielbłądami.Podobnie jak @Travis i @Mari, chciałem dokonać automatycznego wyboru po kliknięciu przez użytkownika, co oznacza zapobieganie domyślnemu zachowaniu
mouseup
zdarzenia, ale nie uniemożliwia użytkownikowi klikania. Rozwiązanie, które wymyśliłem, które działa w IE11, Chrome 45, Opera 32 i Firefox 29 (są to przeglądarki, które obecnie zainstalowałem), opiera się na sekwencji zdarzeń związanych z kliknięciem myszy.Po kliknięciu wpisu tekstowego, który nie jest aktywny, otrzymujesz następujące zdarzenia (między innymi):
mousedown
: W odpowiedzi na twoje kliknięcie. Domyślne podwyżki obsługifocus
razie potrzeby i rozpoczyna się wybór selekcji.focus
: W ramach domyślnej obsługimousedown
.mouseup
: Zakończenie kliknięcia, którego domyślna obsługa ustawi koniec wyboru.Po kliknięciu wprowadzonego tekstu, który jest już aktywny,
focus
zdarzenie jest pomijane. Jak zauważyli zarówno @Travis, jak i @Mari,mouseup
należy zapobiegać domyślnej obsłudze tylko wfocus
przypadku wystąpienia zdarzenia. Ponieważ jednak nie ma „focus
jednak nie ma zdarzenia „nie zdarzyło się”, musimy wywnioskować to, co możemy zrobić wmousedown
module obsługi.Rozwiązanie @ Mari wymaga zaimportowania jQuery, czego chcę uniknąć. Rozwiązanie @ Travisa robi to poprzez kontrolę
document.activeElement
. Nie wiem, dlaczego dokładnie jego rozwiązanie nie działa w różnych przeglądarkach, ale istnieje inny sposób, aby sprawdzić, czy wprowadzanie tekstu ma fokus: po prostu podążaj za jegofocus
iblur
zdarzenia zdarzenia.Oto kod, który działa dla mnie:
Mam nadzieję, że to komuś pomoże. :-)
źródło
źródło
Musisz tylko dodać następujący atrybut:
Na przykład:
(Szczerze mówiąc, nie mam pojęcia, dlaczego potrzebowałbyś czegoś innego.)
źródło
To zadziałało dla mnie (publikowanie, ponieważ nie ma go w odpowiedziach, ale w komentarzu)
źródło
Edycja: Na prośbę @ DavidG nie mogę podać szczegółów, ponieważ nie jestem pewien, dlaczego to działa, ale uważam, że ma to coś wspólnego ze zdarzeniem fokusowym propagującym się w górę lub w dół lub czymkolwiek innym i elementem wejściowym otrzymującym powiadomienie otrzymano fokus. Ustawienie limitu czasu daje elementowi chwilę na uświadomienie sobie, że tak się stało.
źródło
Jeśli połączysz wydarzenia razem, uważam, że eliminuje to potrzebę użycia,
.one
jak sugerowano gdzie indziej w tym wątku.Przykład:
źródło
Uwaga: Jeśli programujesz w ASP.NET, możesz uruchomić skrypt za pomocą ScriptManager.RegisterStartupScript w C #:
Lub po prostu wpisz skrypt na stronie HTML sugerowanej w innych odpowiedziach.
źródło
Sieję to gdzieś, działa idealnie!
źródło
Jestem trochę spóźniony na imprezę, ale działa to doskonale w IE11, Chrome, Firefox, bez pomieszania myszy (i bez JQuery).
źródło
focus
przez tabulatorem do pola, znajdziesz wiele detektory zdarzeń mouseUp mocowania ...Moje rozwiązanie jest następne:
Tak więc najechanie myszką zwykle działa, ale nie spowoduje odznaczenia po uzyskaniu fokusa przez wejście
źródło