Fragment z ustawienia karetki klawiatury Josha Stodola Pozycja w polu tekstowym lub TextArea z JavaScriptem
Ogólna funkcja, która pozwoli ci wstawić kursor w dowolnym miejscu pola tekstowego lub obszaru tekstowego:
function setCaretPosition(elemId, caretPos) {
var elem = document.getElementById(elemId);
if(elem != null) {
if(elem.createTextRange) {
var range = elem.createTextRange();
range.move('character', caretPos);
range.select();
}
else {
if(elem.selectionStart) {
elem.focus();
elem.setSelectionRange(caretPos, caretPos);
}
else
elem.focus();
}
}
}
Pierwszym oczekiwanym parametrem jest identyfikator elementu, do którego chcesz wstawić kursor klawiatury. Jeśli elementu nie można znaleźć, nic się nie stanie (oczywiście). Drugim parametrem jest indeks pozycji daszka. Zero umieści kursor klawiatury na początku. Jeśli podasz liczbę większą niż liczba znaków w wartości elementu, na końcu umieści kursor klawiatury.
Testowane na IE6 i nowszych, Firefox 2, Opera 8, Netscape 9, SeaMonkey i Safari. Niestety w Safari nie działa w połączeniu ze zdarzeniem onfocus).
Przykład użycia powyższej funkcji, aby zmusić kursor klawiatury do przeskoczenia na koniec wszystkich obszarów tekstowych na stronie, gdy otrzymają fokus:
function addLoadEvent(func) {
if(typeof window.onload != 'function') {
window.onload = func;
}
else {
if(func) {
var oldLoad = window.onload;
window.onload = function() {
if(oldLoad)
oldLoad();
func();
}
}
}
}
// The setCaretPosition function belongs right here!
function setTextAreasOnFocus() {
/***
* This function will force the keyboard caret to be positioned
* at the end of all textareas when they receive focus.
*/
var textAreas = document.getElementsByTagName('textarea');
for(var i = 0; i < textAreas.length; i++) {
textAreas[i].onfocus = function() {
setCaretPosition(this.id, this.value.length);
}
}
textAreas = null;
}
addLoadEvent(setTextAreasOnFocus);
if(elem.selectionStart)
przerywa się, gdy selectionStart ma wartość 0, jak również wskazała odpowiedź jhnns.elem.value = elem.value.replace(/^9/g,'+79')
w kodzie. Na OperaMINI kursor po+
. ta funkcja nie pomagaLink w odpowiedzi jest uszkodzony, ten powinien działać (wszystkie kredyty idą na blog.vishalon.net ):
http://snipplr.com/view/5144/getset-cursor-in-html-textarea/
W przypadku ponownego zgubienia kodu, oto dwie główne funkcje:
źródło
Ponieważ naprawdę potrzebowałem tego rozwiązania, a typowe rozwiązanie podstawowe ( skoncentruj dane wejściowe - a następnie ustaw wartość równą sobie ) nie działa w różnych przeglądarkach , spędziłem trochę czasu na poprawianiu i edytowaniu wszystkiego, aby działało. Opierając się na @ kd7 , oto co wymyśliłem.
Cieszyć się! Działa w IE6 +, Firefox, Chrome, Safari, Opera
Technika pozycjonowania kursora w różnych przeglądarkach (przykład: przesuwanie kursora do KONIEC)
Mięso i ziemniaki to w zasadzie setCaretPosition @ kd7 , z największą zmianą w firefoxie,
if (el.selectionStart || el.selectionStart === 0)
że selectionStart zaczyna się od 0 , co oczywiście zmienia się w wartość Fałsz, więc tam się psuje.W chrome największym problemem było to, że samo podanie go
.focus()
nie wystarczyło (ciągle wybierał CAŁY tekst!) Dlategoel.value = el.value;
przed wywołaniem naszej funkcji ustawiliśmy wartość samą w sobie , a teraz ma ona uchwyt i pozycję z wejście do użycia selectionStart .źródło
.onclick
zamiast w.onfocus
ramach funkcji search_field_focusel.value = el.value; [...] if(el !== null)
- Zamieniłbym te dwie linie. Jeśliel
jest null,el.value = el.value
zakończy się niepowodzeniem, więc ta linia powinna znajdować się wewnątrzif
.Poprawiłem trochę odpowiedź kd7, ponieważ elem.selectionStart oceni jako false, gdy selectionStart będzie przypadkowo równa 0.
źródło
Znalazłem łatwy sposób na naprawienie tego problemu, przetestowany w IE i Chrome:
Przekaż identyfikator pola tekstowego i pozycję kursora do tej funkcji.
źródło
Jeśli chcesz skupić się na jakimś polu tekstowym, a Twoim jedynym problemem jest to, że cały tekst zostanie podświetlony, podczas gdy chcesz, aby daszek znajdował się na końcu, w tym konkretnym przypadku możesz użyć tej sztuczki, aby ustawić wartość pola tekstowego na siebie po fokusie:
źródło
źródło
źródło
tID
powinno być identyfikatorem elementu, a nie samym obiektem elementu. Jeśli przekazujesz obiekt element, możesz po prostu usunąć 2 pierwsze linie w tej metodzie i zadziała.Naprawiłbym warunki jak poniżej:
źródło