To pytanie zostało zadane w kilku różnych formatach, ale nie mogę uzyskać żadnej odpowiedzi, która zadziała w moim scenariuszu.
Używam jQuery do implementacji historii poleceń, gdy użytkownik uderza w strzałki w górę / w dół. Po naciśnięciu strzałki w górę zastępuję wartość wejściową poprzednim poleceniem i ustawiam fokus na polu wejściowym, ale chcę, aby kursor był zawsze umieszczony na końcu ciągu wejściowego.
Mój kod, jak jest:
$(document).keydown(function(e) {
var key = e.charCode ? e.charCode : e.keyCode ? e.keyCode : 0;
var input = self.shell.find('input.current:last');
switch(key) {
case 38: // up
lastQuery = self.queries[self.historyCounter-1];
self.historyCounter--;
input.val(lastQuery).focus();
// and it continues on from there
Jak mogę wymusić umieszczenie kursora na końcu pola „input” po fokusie?
javascript
jquery
focus
cursor
jerodsanto
źródło
źródło
var temp = input.focus().val(); input.val('').val(temp);
input.focus().val(input.val());
contenteditable
jakiegoś powodu nie wydaje się działać z elementami, może dlatego, że trzeba.html()
raczej użyć niż.val()
Wygląda to trochę dziwnie, a nawet głupio, ale to działa dla mnie:
Teraz nie jestem pewien, czy zreplikowałem twoją konfigurację. Zakładam, że
input
to<input>
element.Po ponownym ustawieniu wartości (do siebie) myślę, że kursor jest umieszczany na końcu danych wejściowych. Przetestowano w Firefoksie 3 i MSIE7.
źródło
Mam nadzieję, że to pomoże:
źródło
Chris Coyier ma do tego wtyczkę mini jQuery, która działa doskonale: http://css-tricks.com/snippets/jquery/move-cursor-to-end-of-textarea-or-input/
Używa setSelectionRange, jeśli jest obsługiwana, w przeciwnym razie ma solidną rezerwę.
Następnie możesz po prostu zrobić:
źródło
A co w jednej linii ...
Ta linia działa dla mnie.
źródło
2 odpowiedź artlunga : Działa tylko z drugą linią w moim kodzie (IE7, IE8; Jquery v1.6):
Dodanie: jeśli element wejściowy został dodany do DOM za pomocą JQuery, fokus nie jest ustawiony w IE. Użyłem małej sztuczki:
źródło
Ref: @ will824 Komentarz, To rozwiązanie działało dla mnie bez problemów ze zgodnością. Pozostałe rozwiązania zawiodły w IE9.
Przetestowane i uznane za działające w:
źródło
Wiem, że ta odpowiedź przychodzi późno, ale widzę, że ludzie nie znaleźli odpowiedzi. Aby klawisz w górę nie umieszczał kursora na początku, tylko
return false
z metody obsługującej zdarzenie. To zatrzymuje łańcuch zdarzeń prowadzący do ruchu kursora. Wklejanie poprawionego kodu z OP poniżej:źródło
var key = e.charCode || e.keyCode || 0;
Używam kodu poniżej i działa dobrze
źródło
Będzie inaczej dla różnych przeglądarek:
Działa to w ff:
Więcej szczegółów w tych artykułach tutaj na SitePoint , AspAlliance .
źródło
jak powiedzieli inni, wyczyść i wypełnij zadziałało dla mnie:
źródło
ustaw wartość jako pierwszą. następnie ustaw ostrość. kiedy się skupi, użyje wartości istniejącej w momencie skupienia, więc twoja wartość musi być ustawiona jako pierwsza.
ta logika działa dla mnie z aplikacją, która zapełnia an
<input>
wartością kliknięcia<button>
.val()
jest ustawiony jako pierwszy. następniefocus()
źródło
$('input[name=item1]').val(value).focus();
Znalazłem to samo, co sugerowało powyżej kilka osób. Jeśli
focus()
najpierw wepchnieszval()
do wejścia, kursor zostanie umieszczony na końcu wartości wejściowej w przeglądarkach Firefox, Chrome i IE. Jeśli najpierw wepchnieszval()
do pola wprowadzania, Firefox i Chrome ustawią kursor na końcu, ale IE przesunie go do przodufocus()
.powinien załatwić sprawę (i tak zawsze ma dla mnie).
źródło
Najpierw musisz ustawić fokus na wybranym obiekcie tekstowym, a następnie ustawić wartość.
źródło
działa dla wszystkich, tj. przeglądarek.
źródło
Oto kolejny, jeden wkład, który nie zmienia przypisania wartości:
źródło
źródło
Odpowiedź od scorpion9 działa. Żeby było jaśniej, zobacz mój kod poniżej,
źródło
Skupi się za pomocą punktu myszy
$ ("# TextBox"). Focus ();
źródło