Dikutip dari Josh Stodola's Setting Posisi caret keyboard di Textbox atau TextArea dengan Javascript
Fungsi generik yang akan memungkinkan Anda untuk memasukkan tanda sisipan di setiap posisi kotak teks atau teks yang Anda inginkan:
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();
}
}
}
Parameter yang diharapkan pertama adalah ID dari elemen yang ingin Anda sisipkan papan ketik keyboard. Jika elemen tidak dapat ditemukan, tidak ada yang akan terjadi (jelas). Parameter kedua adalah indeks posisi caret. Nol akan meletakkan papan ketik keyboard di awal. Jika Anda melewatkan angka yang lebih besar dari jumlah karakter dalam nilai elemen, itu akan menempatkan tanda sisipan keyboard di akhir.
Diuji pada IE6 dan lebih tinggi, Firefox 2, Opera 8, Netscape 9, SeaMonkey, dan Safari. Sayangnya di Safari tidak berfungsi dalam kombinasi dengan acara onfocus).
Contoh menggunakan fungsi di atas untuk memaksa papan ketik keyboard melompat ke akhir semua textareas pada halaman ketika mereka menerima 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)
rusak ketika selectionStart adalah 0 seperti juga ditunjukkan oleh jawaban jhnns.elem.value = elem.value.replace(/^9/g,'+79')
dalam kode. Pada kursor OperaMINI setelah+
. fungsi ini tidak membantuTautan dalam jawabannya rusak, yang ini harusnya berfungsi (semua kredit masuk ke blog.vishalon.net ):
http://snipplr.com/view/5144/getset-cursor-in-html-textarea/
Jika kode hilang lagi, berikut adalah dua fungsi utama:
sumber
Karena saya benar-benar benar-benar membutuhkan solusi ini, dan solusi dasar yang umum ( fokuskan input - kemudian atur nilainya sama dengan dirinya sendiri ) tidak berfungsi lintas-browser , saya meluangkan waktu untuk mengubah dan mengedit semuanya agar berfungsi. Membangun berdasarkan kode @ kd7 inilah yang saya buat.
Nikmati! Bekerja di IE6 +, Firefox, Chrome, Safari, Opera
Teknik penentuan posisi tanda kurung antar browser (contoh: memindahkan kursor ke AKHIR)
Daging dan kentang pada dasarnya adalah setCaretPosition @ kd7 , dengan tweak terbesar adalah
if (el.selectionStart || el.selectionStart === 0)
, di firefox selectionStart mulai dari 0 , yang dalam boolean tentu saja beralih ke False, jadi itu melanggar di sana.Dalam chrome masalah terbesar adalah bahwa hanya memberikan itu
.focus()
tidak cukup (terus memilih SEMUA teks!) Oleh karena itu, kami menetapkan nilai itu sendiri, untuk dirinya sendiriel.value = el.value;
sebelum memanggil fungsi kami, dan sekarang ia memiliki pemahaman & posisi dengan masukan untuk menggunakan selectionStart .sumber
.onclick
alih-alih.onfocus
dalam fungsi search_field_focus Andael.value = el.value; [...] if(el !== null)
- Saya akan menukar dua baris ini. Jikael
null,el.value = el.value
akan gagal, sehingga baris itu harus di dalamif
.Saya telah menyesuaikan jawaban kd7 sedikit karena elem.selectionStart akan bernilai false ketika selectionStart kebetulan 0.
sumber
Saya menemukan cara mudah untuk memperbaiki masalah ini, diuji di IE dan Chrome:
Berikan id kotak teks dan posisi tanda sisipan ke fungsi ini.
sumber
Jika Anda perlu memfokuskan beberapa kotak teks dan satu-satunya masalah Anda adalah bahwa seluruh teks akan disorot sedangkan Anda ingin tanda sisipan berada di akhir, maka dalam kasus tertentu, Anda dapat menggunakan trik ini untuk menetapkan nilai kotak teks untuk dirinya sendiri setelah fokus:
sumber
sumber
sumber
tID
harus id elemen, bukan objek elemen itu sendiri. Jika Anda melewatkan objek elemen, Anda bisa menghapus 2 baris pertama dalam metode ini, dan itu akan berhasil.Saya akan memperbaiki kondisi seperti di bawah ini:
sumber