Bagaimana saya bisa mendapatkan posisi tanda kuret dari dalam bidang input?
Saya telah menemukan beberapa bit dan potongan melalui Google, tetapi tidak ada bukti peluru.
Pada dasarnya sesuatu seperti plugin jQuery akan ideal, jadi saya bisa melakukannya
$("#myinput").caretPosition()
javascript
jquery
html
MarkB29
sumber
sumber
<input>
cara lebih sederhana daripada melakukannya dalam sebuah<textarea>
.size
karakter masa lalu .Jawaban:
Pembaruan yang lebih mudah:
Gunakan
field.selectionStart
contoh dalam jawaban ini .Terima kasih kepada @commonSenseCode untuk menunjukkan ini.
Jawaban lama:
Menemukan solusi ini. Tidak berbasis jquery tetapi tidak ada masalah untuk mengintegrasikannya ke jquery:
sumber
else if (oField.selectionStart || oField.selectionStart == '0')
bisaelse if (typeof oField.selectionStart==='number')
document.selection
, bukanfield.selection
atau sesuatu. Juga, dimungkinkan di IE 7 (tidak tahu apakah masih mungkin di 8+) untuk memilih sesuatu, dan kemudian TAB keluar dari lapangan tanpa kehilangan pilihan. Dengan cara ini, ketika teks dipilih tetapi bidang tidak fokus,document.selection
mengembalikan seleksi nol. Itu sebabnya, sebagai solusi untuk bug ini, Anda harus fokus pada elemen sebelum membacadocument.selection
.Bagus, terima kasih banyak untuk Max.
Saya telah memasukkan fungsionalitas dalam jawabannya menjadi jQuery jika ada yang ingin menggunakannya.
sumber
input = $(this).get(0)
sama denganinput = this
?this
mengacu pada set lengkap yang dibungkus. Namun kodenya masih salah, seharusnya begituthis.get(0)
. Kode-nya mungkin masih berfungsi karena membungkus ulang set yang dibungkus tidak menghasilkan apa-apa.SANGAT MUDAH
Jawaban yang diperbarui
Gunakan
selectionStart
, ini kompatibel dengan semua browser utama .Pembaruan: Ini hanya berfungsi ketika tidak ada tipe yang didefinisikan atau
type="text"
pada input.sumber
.selectionStart
properti kapan saja (document.getElementById('foobar').selectionStart
), tidak harus berada di dalam pendengar acara.Punya solusi yang sangat sederhana . Coba kode berikut dengan hasil yang diverifikasi -
Aku memberimu fiddle_demo
sumber
slice
adalah operasi yang relatif mahal dan tidak menambah apa pun pada 'solusi' ini -el.selectionStart
setara dengan panjang slice Anda; kembalikan saja itu. Selain itu, alasan solusi lain lebih rumit adalah karena mereka berurusan dengan browser lain yang tidak mendukungselectionStart
.f1
kira-kira bermakna seperti 'user2782001'. 😉Sekarang ada plugin yang bagus untuk ini: Plugin Caret
Kemudian Anda bisa mendapatkan posisi menggunakan
$("#myTextBox").caret()
atau mengaturnya melalui$("#myTextBox").caret(position)
sumber
sumber
Ada beberapa jawaban bagus yang diposting di sini, tetapi saya pikir Anda dapat menyederhanakan kode Anda dan melewatkan pemeriksaan untuk
inputElement.selectionStart
dukungan: itu tidak hanya didukung pada IE8 dan sebelumnya (lihat dokumentasi ) yang mewakili kurang dari 1% dari penggunaan browser saat ini .sumber
Mungkin Anda memerlukan rentang yang dipilih selain posisi kursor. Ini adalah fungsi sederhana, Anda bahkan tidak perlu jQuery:
Katakanlah Anda ingin menyebutnya pada input setiap kali ia berubah atau mouse memindahkan posisi kursor (dalam hal ini kami menggunakan jQuery
.on()
). Untuk alasan kinerja, mungkin merupakan ide bagus untuk menambahkansetTimeout()
atau sesuatu seperti Menggarisbawahi_debounce()
jika ada acara:Berikut adalah biola jika Anda ingin mencobanya: https://jsfiddle.net/Dhaupin/91189tq7/
sumber
sumber