Jak najlepiej (i zakładam najprostszy sposób) umieścić kursor na końcu tekstu w elemencie wejściowym za pomocą JavaScript - po ustawieniu fokusa na elemencie?
javascript
Arachid
źródło
źródło
Istnieje prosty sposób, aby uruchomić go w większości przeglądarek.
Jednak z powodu * dziwactw niektórych przeglądarek bardziej kompleksowa odpowiedź wygląda mniej więcej tak
Korzystanie z jQuery (aby ustawić detektor, ale inaczej nie jest to konieczne)
Pokaż fragment kodu
Korzystanie z Vanilla JS (
addEvent
funkcja pożyczania z tej odpowiedzi )Pokaż fragment kodu
Dziwactwa
Chrome ma dziwne dziwactwo, gdy zdarzenie skupienia jest uruchamiane, zanim kursor zostanie przeniesiony w pole; co psuje moje proste rozwiązanie. Dwie opcje, aby to naprawić:
focus
namouseup
. Byłoby to dość denerwujące dla użytkownika, chyba że nadal będziesz śledzić koncentrację. Tak naprawdę nie jestem zakochana w żadnej z tych opcji.@Vladkras wskazał również, że niektóre starsze wersje Opery niepoprawnie obliczają długość, gdy ma spacje. W tym celu możesz użyć ogromnej liczby, która powinna być większa niż ciąg.
źródło
this.selectionStart = this.selectionEnd = 0;
powinno to przenieść fokus przed pierwszą literą pola wprowadzania. Ale raczej, kiedy debugowałem, nie zmienia to nawet wartości selekcji Koniec i selekcja Zacznij! A także nie przenosząc go do pierwszej postaci !!selectionStart
ilength
zwraca mniejszą liczbę na spacje. Dlatego używam10000
lub jakiejkolwiek innej wystarczająco dużej liczby zamiastthis.value.length
(testowane na IE8 i IE11)Spróbuj, to zadziałało dla mnie:
Aby kursor został przesunięty na koniec, wejście musi najpierw skupić się, a następnie po zmianie wartości dojdzie do końca. Jeśli ustawisz .value na tę samą wartość, nie zmieni się ona w chrome.
źródło
this.
przed danymi wejściowymi w wierszach 2, 3 i 4? Wiemy już, żeinput
jest to element wejściowy. Używaniethis
wydaje się zbędne. W przeciwnym razie dobre rozwiązanie!$input.focus().val($input.val());
Po drobnym włamaniu się do tego, znalazłem najlepszy sposób, aby użyć tej
setSelectionRange
funkcji, jeśli przeglądarka ją obsługuje; jeśli nie, wróć do korzystania z metody zawartej w odpowiedzi Mike'a Berrowa (tj. zamień wartość na samą siebie).Ustawiam też
scrollTop
wysoką wartość na wypadek, gdybyśmy mogli przewijać w pionietextarea
. (Korzystanie z dowolnej wysokiej wartości wydaje się bardziej niezawodne niż$(this).height()
w Firefoksie i Chrome.)Zrobiłem to jako wtyczkę jQuery. (Jeśli nie używasz jQuery, ufam, że nadal możesz łatwo dostrzec istotę.)
Testowałem w IE6, IE7, IE8, Firefox 3.5.5, Google Chrome 3.0, Safari 4.0.4, Opera 10.00.
Jest dostępny na stronie jquery.com jako wtyczka PutCursorAtEnd . Dla Twojej wygody kod wersji 1.0 wygląda następująco:
źródło
Ta funkcja działa dla mnie w IE9, Firefox 6.x i Opera 11.x
źródło
SCRIPT16389: Unspecified error.
Próbowałem następujących z dużym sukcesem w chrome
Szybkie podsumowanie:
Pobiera wszystkie pola wejściowe, na których koncentruje się klasa, a następnie zapisuje starą wartość pola wejściowego w zmiennej, a następnie stosuje pusty ciąg do pola wejściowego.
Następnie czeka 1 milisekundę i ponownie wprowadza starą wartość.
źródło
Jest rok 2019 i żadna z powyższych metod nie zadziałała dla mnie, ale ta zadziałała, zaczerpnięta z https://css-tricks.com/snippets/javascript/move-cursor-to-end-of-input/
źródło
el.focus()
w,else if
więc to nie działało w niektórych przypadkach. Sprawdziłem, że działa teraz w Chrome i (wzdrygam) IEProsty. Podczas edycji lub zmiany wartości najpierw ustaw fokus, a następnie ustaw wartość.
źródło
Nadal potrzebna jest zmienna pośrednia (patrz var val =), inaczej kursor zachowuje się dziwnie, potrzebujemy jej na końcu.
źródło
el.setSelectionRange(-1, -1);
https://codesandbox.io/s/peaceful-bash-x2mti
https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange
W innych metodach js
-1
zwykle oznacza (do) ostatniego znaku. Dotyczy to również tego, ale nie mogłem znaleźć wyraźnej wzmianki o tym zachowaniu w dokumentacji.źródło
Dla wszystkich przeglądarek we wszystkich przypadkach:
Limit czasu jest wymagany, jeśli chcesz przenieść kursor z modułu obsługi zdarzeń onFocus
źródło
Bardzo podoba mi się zaakceptowana odpowiedź, ale przestała działać w Chrome. W Chrome, aby kursor znalazł się na końcu, wartość wejściowa musi się zmienić. Rozwiązanie jest następujące:
źródło
W jQuery to jest
źródło
Ten problem jest interesujący. Najbardziej mylące jest to, że żadne rozwiązanie, które znalazłem, nie rozwiązało problemu całkowicie.
+++++++ ROZWIĄZANIE +++++++
Potrzebujesz funkcji JS, takiej jak ta:
Musisz zadzwonić do tego faceta podczas wydarzeń onfocus i onclick.
TO DZIAŁA NA WSZYSTKICH URZĄDZENIACH PRZEGLĄDAREK !!!!
źródło
Właśnie odkryłem, że w iOS ustawienie
textarea.textContent
właściwości spowoduje umieszczenie kursora na końcu tekstu w elemencie textarea za każdym razem. Zachowanie to było błędem w mojej aplikacji, ale wydaje się, że można tego użyć celowo.źródło
źródło
Biorąc niektóre odpowiedzi .. tworząc jednowierszową jquery.
źródło
Jeśli pole wejściowe potrzebuje tylko statycznej wartości domyślnej, zwykle robię to za pomocą jQuery:
Wydaje się, że działa to we wszystkich przeglądarkach.
źródło
Chociaż może to być stare pytanie z dużą ilością odpowiedzi, natknąłem się na podobny problem i żadna z odpowiedzi nie była dokładnie tym, czego chciałem i / lub nie została źle wyjaśniona. Problem z właściwością selectionStart i selectionEnd polega na tym, że nie istnieją one dla numeru typu danych wejściowych (choć pytanie dotyczy typu tekstu, myślę, że może to pomóc innym, którzy mogą mieć inne typy danych wejściowych, na których powinni się skupić). Więc jeśli nie wiesz, czy typem wejściowym, na którym będzie się skupiać funkcja, jest liczba typu, czy nie, nie możesz użyć tego rozwiązania.
Rozwiązanie, które działa w różnych przeglądarkach i dla wszystkich typów danych wejściowych, jest raczej proste:
W ten sposób kursor znajduje się na końcu elementu wejściowego.
Wszystko, co możesz zrobić, to coś takiego (używając jquery, pod warunkiem, że selektor elementów, na który chcemy się skupić, jest dostępny poprzez atrybut danych „element-focus-element” klikniętego elementu, a funkcja wykonuje się po kliknięciu „.foo” element):
Dlaczego to działa? Po prostu, gdy wywoływana jest funkcja .focus (), fokus zostanie dodany na początku elementu wejściowego (co jest tutaj głównym problemem), ignorując fakt, że element wejściowy ma już w sobie wartość. Jednak po zmianie wartości danych wejściowych kursor jest automatycznie umieszczany na końcu wartości w elemencie wejściowym. Więc jeśli zastąpisz wartość tą samą wartością, która została wcześniej wprowadzona na wejściu, wartość będzie wyglądać nietknięta, kursor przesunie się jednak na koniec.
źródło
Wypróbuj ten działa z Vanilla JavaScript.
W Js
źródło
Ustaw kursor po kliknięciu obszaru tekstowego na końcu tekstu ... Odmiana tego kodu jest ... TAKŻE działa! dla Firefox, IE, Safari, Chrome ..
W kodzie po stronie serwera:
W JavaScript:
źródło
Jeśli najpierw ustawisz wartość, a następnie fokus, kursor będzie zawsze pojawiał się na końcu.
Oto skrzypce do testowania https://jsfiddle.net/5on50caf/1/
źródło
Chciałem umieścić kursor na końcu elementu „div”, gdzie contenteditable = true, i dostałem rozwiązanie z kodem Xeoncross :
I ta funkcja robi magię:
Działa dobrze dla większości przeglądarek, sprawdź to, ten kod umieszcza tekst i umieszcza fokus na końcu tekstu w elemencie div (nie elemencie wejściowym)
https://jsfiddle.net/Xeoncross/4tUDk/
Dzięki, Xeoncross
źródło
Też napotkałem ten sam problem. Wreszcie to zadziała dla mnie:
Oto jak możemy to nazwać:
Działa dla mnie w Safari, IE, Chrome, Mozilla. Na urządzeniach mobilnych nie próbowałem tego.
źródło
Sprawdź to rozwiązanie!
źródło
Super łatwe (być może będziesz musiał skupić się na elemencie wejściowym)
źródło
Próbowałem wcześniej sugestii, ale żadna nie działała dla mnie (przetestowałem je w Chrome), więc napisałem własny kod - i działa dobrze w Firefox, IE, Safari, Chrome ...
W Textarea:
W JavaScript:
źródło
Oto demo jsFiddle mojej odpowiedzi. Demo używa CoffeeScript, ale możesz przekonwertować go na zwykły JavaScript razie potrzeby .
Ważna część w JavaScript:
Publikuję tę odpowiedź, ponieważ napisałem ją już dla kogoś, kto miał to samo pytanie. Ta odpowiedź nie obejmuje tylu przypadków krawędzi, co najlepsze odpowiedzi tutaj, ale działa dla mnie i ma wersję demonstracyjną jsFiddle, z którą możesz grać.
Oto kod z jsFiddle, więc ta odpowiedź zostanie zachowana, nawet jeśli jsFiddle zniknie:
źródło
Wypróbuj następujący kod:
źródło
setSelectionRange
podejście jest z pewnością o wiele bardziej efektywne, kiedy / gdzie obsługiwane.Chociaż odpowiadam za późno, ale w przypadku przyszłych zapytań będzie to pomocne. I działa również w
contenteditable
div.Skąd należy ustawić fokus na końcu; napisz ten kod
A funkcja to -
źródło