Jak programowo zaznaczyć tekst w polu wprowadzania na urządzeniach z systemem iOS, np. IPhone, iPad z mobilną przeglądarką Safari?
Zwykle wystarczy wywołać .select()
funkcję na <input ... />
elemencie, ale to nie działa na tych urządzeniach. Kursor jest po prostu pozostawiony na końcu istniejącego wpisu bez dokonanego wyboru.
Odpowiedzi:
input.setSelectionRange(0, 9999);
https://developer.mozilla.org/en/DOM/Input.select
źródło
.focus()
na wejściu przed wywołanieminput.setSelectionRange
. Jeśli nasłuchujeszfocus
zdarzenia na wejściu, pamiętaj o uwzględnieniu nieskończonej pętli.readonly
ustawiony atrybut.setSelectionRange()
wfocus
module obsługi działa, gdy wyzwalasz.focus()
programowo, ale po ręcznym dotknięciu wprowadzania tekstu w systemie iOS zaznaczenie nie nastąpi. Wystarczy powiedzieć, że wszystko, co musisz zrobić, to wywołaćsetSelectionRange()
w ramach setTimeout 0 i działa zgodnie z oczekiwaniami bez względu na to, co wyzwala fokus.Nic w tym wątku nie działało dla mnie, oto, co działa na moim iPadzie:
// t is the input field setTimeout(function() { t.setSelectionRange(0, 9999); }, 1);
źródło
Trudno udowodnić coś negatywnego, ale moje badania sugerują, że jest to błąd w Mobile Safari.
Zwróć uwagę, że fokus () działa mniej więcej - chociaż może wymagać więcej niż jednego dotknięcia, aby odnieść sukces, i nie jest to konieczne, jeśli próbujesz odpowiedzieć użytkownikowi, dotknij pola, o którym mowa, ponieważ samo dotknięcie da pole skupiać. Niestety, select () jest po prostu niefunkcjonalne w Mobile Safari.
Najlepszym rozwiązaniem może być zgłoszenie błędu w Apple .
źródło
Zobacz to skrzypce : (wprowadź tekst w polu wprowadzania i kliknij „wybierz tekst”)
To zaznaczanie tekstu w polu wprowadzania na moim iPodzie (5.generacji iOS6.0.1), otwieranie klawiatury, a także wyświetlanie menu Wytnij / Kopiuj / Zaproponuj ...
Używając zwykłego javascript. Nie próbowałem tego z jQuery
document.getElementById("p1").selectionStart = 0 document.getElementById("p1").selectionEnd = 999
Zauważ, że liczba 999 to tylko próbka. Powinieneś ustawić te liczby na liczbę znaków, które chcesz zaznaczyć.
AKTUALIZACJA:
W przypadku dwóch ostatnich możesz poeksperymentować, wywołując zdarzenie kliknięcia
input
elementuAKTUALIZACJA: (07-10-2013)
AKTUALIZACJA: (14-11-2013)
.selectionStart
i.selectionEnd
czyni pracę.AKTUALIZACJA: (15-01-2015)
źródło
<input/>
, że pukam w twój , iPad myślał, że pukam w okienku „CSS” jsfiddle (gdzie wszystko, co wpisałem, było niewidoczne). Gdy dotknąłem właściwego miejsca<input/>
, przycisk „zaznacz tekst” działa doskonale na iOS-7.0.3 :-).Przepraszam, w moim poprzednim poście nie zauważyłem kodu JavaScript sugerującego, że chcesz otrzymać odpowiedź w JavaScript.
Aby uzyskać to, czego chcesz w UIWebView z javascript , udało mi się zeskrobać dwie ważne informacje, aby to zadziałało. Nie jestem pewien co do przeglądarki mobilnej.
element.setSelectionRange(0,9999);
robi co chcemyZdarzenie mouseUp cofa wybór
Zatem (używając Prototype):
Zrób sztuczkę.
Matt
źródło
$("input").focus(function () { this.setSelectionRange(0, 9999); return false; } ).mouseup( function () { return false; });
focusin
zamiast skupić się, aby to zadziałało, iOS 7Wygląda na to, że fokus będzie działał, ale tylko wtedy, gdy zostanie wywołany bezpośrednio z wydarzenia natywnego. wywołanie fokusa przy użyciu czegoś takiego jak SetTimeout nie pojawia się przywołaj klawiaturę. Sterowanie klawiaturą ios jest bardzo słabe. To nie jest dobra sytuacja.
źródło
Coś podobnego do poniższego działa dla mnie w przypadku Webkita dostarczanego z Androidem 2.2:
function trySelect(el) { setTimeout(function() { try { el.select(); } catch (e) { } }, 0); }
Zobacz wydanie Chromium 32865 .
źródło
Z iOS 7 na iPadzie jedynym sposobem, w jaki mogłem wykonać tę pracę, było użycie faktycznie
<textarea></textarea>
zamiast<input>
pola.na przykład
<textarea onclick="this.setSelectionRange(0, 9999);">My text will be selected when textarea is clicked.</textarea>
Jak uniemożliwić użytkownikowi zmianę tekstu w obszarze, było trudniejsze, ponieważ jeśli ustawisz tekst tylko do odczytu, sztuczka z zaznaczaniem nie będzie już działać.
źródło
Poszukałem tego rozwiązania, a wszystkie Twoje odpowiedzi pomogły mi otworzyć kolejną puszkę robaków.
Klient chciał, aby użytkownik mógł kliknąć i zaznaczyć wszystko , a także pozwolić użytkownikowi „zakładkę” i zaznaczyć wszystko na iPadzie (z zewnętrzną klawiaturą. Wiem, szaleństwo ...)
Moim rozwiązaniem tego problemu było przestawienie wydarzeń. Najpierw ustaw ostrość , następnie kliknij , a następnie dotknij Start .
$('#myFUBARid').on('focus click touchstart', function(e){ $(this).get(0).setSelectionRange(0,9999); //$(this).css("color", "blue"); e.preventDefault(); });
Mam nadzieję, że to komuś pomoże, ponieważ pomogliście mi niezliczoną ilość razy.
źródło
Jeśli korzystasz z przeglądarek zgodnych z HTML5, możesz użyć
placeholder="xxx"
w swoiminput
tagu. To powinno wystarczyć.źródło