Mam następujący kod do wyświetlenia pola tekstowego na stronie HTML.
<input type="text" id="userid" name="userid" value="Please enter the user ID" />
Po wyświetleniu strony tekst zawiera komunikat Wprowadź identyfikator użytkownika . Stwierdziłem jednak, że użytkownik musi kliknąć 3 razy, aby zaznaczyć cały tekst (w tym przypadku jest to proszę podać identyfikator użytkownika ).
Czy można zaznaczyć cały tekst za pomocą jednego kliknięcia?
Edytować:
Przepraszam, zapomniałem powiedzieć: muszę użyć danych wejściowych type="text"
javascript
html
textinput
pytania
źródło
źródło
<label>
etykiety, a nie etykietyvalue
. Możesz użyć JS i CSS, aby wyglądać tak samo, nie będąc tak antysemantycznym. dorward.me.uk/tmp/label-work/example.html ma przykład wykorzystujący jQuery.Odpowiedzi:
Możesz użyć tego fragmentu javascript:
Ale najwyraźniej nie działa na mobilnym Safari. W takich przypadkach możesz użyć:
źródło
this.id
jako argumentu dla procedury obsługi kliknięć. Co więcej, możeszgetElementById
całkowicie wyeliminować i przekazaćthis
jako argument.this.setSelectionRange(0, this.value.length)
zamiast tego.Wcześniej opublikowane rozwiązania mają dwa dziwactwa:
Oto kompletne rozwiązanie, które zaznacza cały tekst na fokusie, ale umożliwia wybranie określonego punktu kursora po fokusie.
źródło
.on('blur', 'input', function(){focusedElement = null;})
0
pracy dla mnie w chrome i firefox. nie jestem pewien, skąd50
pochodzi twój limit czasu .HTML (będziesz musiał umieścić atrybut onclick na każdym wejściu, dla którego ma działać na stronie)
LUB LEPSZA OPCJA
jQuery (będzie działać dla każdego tekstu wprowadzanego na stronie, nie trzeba zmieniać HTML):
źródło
Wiem, że to stare, ale najlepszą opcją jest teraz użycie nowego
placeholder
atrybutu HTML, jeśli to możliwe:Spowoduje to, że tekst będzie wyświetlany, chyba że zostanie wprowadzona wartość, co eliminuje potrzebę wybierania tekstu lub czyszczenia danych wejściowych.
źródło
Wymienione odpowiedzi są według mnie częściowe. Poniżej zamieściłem dwa przykłady tego, jak to zrobić w Angular i JQuery.
To rozwiązanie ma następujące funkcje:
JQuery: http://plnkr.co/edit/VZ0o2FJQHTmOMfSPRqpH?p=preview
Angular: http://plnkr.co/edit/llcyAf?p=preview
źródło
Próbować:
Działa świetnie dla mnie.
źródło
Zawsze możesz używać
document.execCommand
( obsługiwane we wszystkich głównych przeglądarkach )Zaznacza cały tekst w aktualnie zaznaczonym elemencie.
źródło
<input type="text" onclick="document.execCommand('selectall',null,false);" />
contenteditable
elementy. Myślę, że możesz uczynić go nawet nieco bardziej eleganckim, tj.<input type="text" onfocus="document.execCommand('selectall')">
- całkiem pewnym, że możesz go usunąć,null
afalse
jeśli ich nie użyjesz.onfocus
wydaje się lepszy niżonclick
. i tak, można pozbyć sięnull
ifalse
. Dzięki!onfocus
cała strona jest wybierana po kliknięciu wejścia w Chrome.onclick
działa w porządku.wejściowy autofokus ze zdarzeniem onfocus:
Umożliwia to otwarcie formularza z wybranym żądanym elementem. Działa przy użyciu autofokusa, aby trafić na wejście, które następnie wysyła sobie zdarzenie onfocus, które z kolei zaznacza tekst.
źródło
Uwaga: jeśli weźmiesz pod uwagę
onclick="this.select()"
: Przy pierwszym kliknięciu zostaną wybrane wszystkie znaki, a następnie być może chcesz edytować coś na wejściu i ponownie kliknąć między znakami, ale spowoduje to ponowne zaznaczenie wszystkich znaków. Aby rozwiązać ten problem, powinieneś użyćonfocus
zamiastonclick
.źródło
Rzeczywiście, używaj,
onclick="this.select();"
ale pamiętaj, aby nie łączyć z tymdisabled="disabled"
- nie zadziała wtedy i będziesz musiał ręcznie wybrać lub kliknąć kilka razy, aby wybrać, nadal. Jeśli chcesz zablokować wybraną wartość treści, połącz ją z atrybutemreadonly
.źródło
Oto wersja odpowiedzi Shobana do wielokrotnego użytku:
W ten sposób możesz ponownie użyć czystego skryptu dla wielu elementów.
źródło
Możesz wymienić
Z:
Symbol zastępczy służy do zamiany wartości na sposób, w jaki chcesz, aby ludzie mogli pisać w polu tekstowym bez konieczności wielokrotnego klikania lub używania kombinacji klawiszy Ctrl + A. Symbol zastępczy sprawia, że nie jest to wartość, ale jak sama nazwa wskazuje na symbol zastępczy. To jest używane w wielu formularzach online z napisem „Nazwa użytkownika tutaj” lub „E-mail”, a po kliknięciu „E-mail” znika i możesz od razu zacząć pisać.
źródło
Dokładne rozwiązanie tego, o co prosiłeś, to:
Ale przypuszczam, że próbujesz pokazać „Wprowadź identyfikator użytkownika” jako symbol zastępczy lub podpowiedź w danych wejściowych. Możesz więc użyć następujących rozwiązań jako bardziej wydajnego rozwiązania:
źródło
Oto przykład w React, ale jeśli chcesz, możesz go przetłumaczyć na jQuery na waniliowym JS:
Sztuczka polega na tym, aby użyć
onMouseDown
elementu, ponieważ fokus jest już aktywowany do momentu uruchomienia zdarzenia „kliknięcia” (a zatemactiveElement
sprawdzenie zakończy się niepowodzeniem).activeElement
Kontrola jest konieczna, tak aby użytkownik może umieścić swój kursor gdzie chcą bez ciągłego ponownego wyboru całą wejście.Limit czasu jest konieczny, ponieważ w przeciwnym razie tekst zostanie zaznaczony, a następnie natychmiast niezaznaczony, ponieważ, jak sądzę, przeglądarka sprawdza pospolite położenie kursora.
I na koniec,
el = ev.currentTarget
jest to konieczne w React, ponieważ React ponownie wykorzystuje obiekty zdarzeń, a zdarzenie syntetyczne zostanie utracone do momentu uruchomienia setTimeout.źródło
Problem z łapaniem zdarzenia kliknięcia polega na tym, że każde kolejne kliknięcie w tekście powoduje jego ponowne wybranie, podczas gdy użytkownik prawdopodobnie spodziewał się zmienić położenie kursora.
Dla mnie zadziałało zadeklarowanie zmiennej, selectSearchTextOnClick i ustawienie jej domyślnie na true. Moduł obsługi kliknięć sprawdza, czy zmienna jest nadal prawdziwa: jeśli tak, ustawia ją na fałsz i wykonuje funkcję select (). Następnie mam moduł obsługi zdarzenia rozmycia, który przywraca mu wartość true.
Dotychczasowe wyniki wydają się być zachowaniem, którego się spodziewałem.
(Edycja: Zlekceważyłem stwierdzenie, że próbowałem złapać zdarzenie skupienia, jak ktoś sugerował, ale to nie działa: po uruchomieniu zdarzenia skupienia zdarzenie kliknięcia może zostać uruchomione, natychmiast usuwając zaznaczenie tekstu).
źródło
To pytanie ma opcje, gdy .select () nie działa na platformach mobilnych: Programowe wybieranie tekstu w polu wejściowym na urządzeniach z iOS (mobilne Safari)
źródło
HTML tak
<input type="text" value="click the input to select" onclick="javascript:textSelector(this)"/>
i kod javascript bez wiązania
źródło
To normalna aktywność dla TextBox.
Kliknij 1 - Ustaw fokus
Kliknij 2/3 (podwójne kliknięcie) - Wybierz tekst
Możesz ustawić fokus na TextBox, gdy strona ładuje się po raz pierwszy, aby zredukować „select” do pojedynczego zdarzenia podwójnego kliknięcia.
źródło
W polu wprowadzania wpisz „symbol zastępczy” zamiast „wartość”.
źródło
Jeśli korzystasz z AngularJS, możesz użyć niestandardowej dyrektywy dla łatwego dostępu:
Teraz można po prostu użyć tego w następujący sposób:
Próbka pochodzi z wymaganego - więc pierwszy i ostatni wiersz można pominąć, jeśli używasz czegoś innego.
źródło
Jeśli ktoś chce to zrobić na stronie, załaduj w / jQuery (słodkie dla pól wyszukiwania), oto moje rozwiązanie
Na podstawie tego postu. Dzięki CSS-Tricks.com
źródło
Jeśli próbujesz tylko zastąpić tekst zastępczy, gdy użytkownik wybierze element, to oczywiście najlepszą praktyką jest używanie
placeholder
atrybutu w dzisiejszych czasach. Jeśli jednak chcesz wybrać całą bieżącą wartość, gdy pole zostanie zogniskowane, kombinacja odpowiedzi @Cory House i @Toastrackenigma wydaje się być najbardziej kanoniczna. Użyjfocus
ifocusout
zdarzenia, z programami obsługi, które ustawiają / zwalniają bieżący element fokusa, i zaznaczają wszystko, gdy fokus jest aktywny. Przykład angular2 / maszynopisu jest następujący (ale konwersja na waniliowy js byłaby trywialna):Szablon:
Składnik:
źródło