Saya memiliki textarea html sederhana di sisi saya. Sekarang jika Anda mengklik tab di dalamnya, ia pergi ke bidang berikutnya. Saya ingin membuat tombol tab indentasi beberapa spasi sebagai gantinya. Bagaimana saya bisa melakukan ini? Terima kasih.
143
Jawaban:
Meminjam banyak dari jawaban lain untuk pertanyaan serupa (diposting di bawah) ...
jQuery: Cara menangkap penekanan tombol TAB dalam kotak teks
Bagaimana cara menangani <tab> di textarea?
http://jsfiddle.net/jz6J5/
sumber
Solusi ini tidak memerlukan jQuery dan akan mengaktifkan fungsionalitas tab pada semua teks pada halaman.
sumber
this.selectionEnd = s+1;
denganthis.selectionEnd = s + "\t".length;
. Akan lebih bersih untuk menggunakan variabel atau parameter fungsi dan menyimpan karakter indentasi di sana. Tapi Anda tahu apa yang harus diganti sekarang:+1
Menentukan berapa banyak karakter yang dipindahkan.KeyboardEvent.keyCode
danKeyboardEvent.which
properti yang sudah usang. GunakanKeyboardEvent.key
sebagai gantinya.Seperti yang ditulis orang lain, Anda dapat menggunakan JavaScript untuk menangkap acara, mencegah tindakan default (sehingga kursor tidak menggeser fokus) dan menyisipkan karakter tab.
Tapi , menonaktifkan perilaku default membuatnya tidak mungkin untuk memindahkan fokus keluar dari area teks tanpa menggunakan mouse. Pengguna buta berinteraksi dengan halaman web menggunakan keyboard dan tidak ada yang lain - mereka tidak dapat melihat pointer mouse untuk melakukan sesuatu yang berguna dengannya, jadi itu keyboard atau tidak sama sekali. Tombol tab adalah cara utama untuk menavigasi dokumen, dan terutama formulir. Mengganti perilaku default tombol tab akan membuat mustahil bagi pengguna tunanetra untuk memindahkan fokus ke elemen formulir berikutnya.
Jadi, jika Anda menulis situs web untuk khalayak luas, saya akan merekomendasikan untuk tidak melakukan ini tanpa alasan yang meyakinkan , dan memberikan semacam alternatif bagi pengguna tunanetra yang tidak menjebak mereka di dalam textarea.
sumber
Untuk apa nilainya, inilah oneliner saya, untuk apa yang Anda semua bicarakan di utas ini:
Uji dalam edisi terbaru Chrome, Firefox, Internet Explorer dan Edge.
sumber
if(event.shiftKey){if(v.substring(s-1,s)==='\t'){this.value=v.substring(0,s-1)+v.substring(e);this.selectionStart=this.selectionEnd=s-1;}}
Inilah versi saya ini, mendukung:
sumber
Cara modern yang keduanya lurus ke depan dan tidak kehilangan kemampuan untuk membatalkan (Ctrl + Z) perubahan terakhir.
Lebih lanjut tentang
execCommand
:Edit:
Seperti yang ditunjukkan dalam komentar (dan meskipun ini dulunya solusi "modern" ), fitur tersebut sudah usang. Mengutip dokumen:
sumber
indent-textarea
untuk solusi lintas-browser yang menggunakan metode ini + mundur di Firefox.document.execCommand
hanya menjadi diaktifkan setelah pengaturandocument.designMode = "on";
. Saya bisa mendapatkan teks untuk ditulis menjadi elemen yang ada.contentEditable = 'true'
. Namun, ketika saya mencoba menyelesaikan ini di textarea, textNode yang dimasukkan ditempatkan tepat sebelum textarea di dalam dokumen (bukan ke dalam textarea). Tolong coba untuk membantu Mozilla menemukan ini di sini .execCommand
): 'Fitur ini sudah usang. Meskipun masih dapat berfungsi di beberapa browser, penggunaannya tidak disarankan karena dapat dihapus kapan saja. Cobalah untuk menghindari menggunakannya. 'Saya semakin cepat mencoba menggunakan jawaban @ kasdega di lingkungan AngularJS, tidak ada yang saya coba tampaknya mampu membuat Angular bertindak atas perubahan tersebut. Jadi seandainya ada gunanya bagi orang yang lewat, inilah penulisan ulang kode @ kasdega, gaya AngularJS, yang bekerja untuk saya:
dan:
sumber
element.triggerHandler('change');
, jika model tidak akan diperbarui (karenaelement.triggerHandler('change');
saya pikir.Anda harus menulis kode JS untuk menangkap tombol TAB, tekan dan masukkan banyak spasi. Sesuatu yang mirip dengan apa yang dilakukan JSFiddle.
Periksa biola jquery :
HTML :
JavaScript :
sumber
event.preventDefault();
e.keyCode || e.which
.Skrip indetasi multi-baris berdasarkan pada solusi @kasdega.
sumber
start === end
.Solusi ini memungkinkan tabbing dalam seluruh pilihan seperti editor kode khas Anda, dan menghapus centang pilihan itu juga. Namun, saya belum menemukan cara mengimplementasikan shift-tab ketika tidak ada pilihan.
sumber
if (selected.length > 0) {...}
Fiddle sederhana : jsfiddle.net/jwfkbjkrBerdasarkan semua yang orang katakan di sini pada jawaban, itu hanya kombinasi dari keydown (bukan keyup) + preventDefault () + masukkan karakter tab di tanda sisipan. Sesuatu seperti:
Jawaban sebelumnya memiliki jsfiddle yang berfungsi tetapi menggunakan tanda () pada keydown. Jika Anda menghapus lansiran ini, maka itu tidak berhasil. Saya baru saja menambahkan fungsi untuk menyisipkan tab pada posisi kursor saat ini di textarea.
Berikut adalah jsfiddle yang berfungsi untuk hal yang sama: http://jsfiddle.net/nsHGZ/
sumber
Saya melihat masalah ini tidak terpecahkan. Saya mengkodekan ini dan itu bekerja dengan sangat baik. Ini memasukkan tabulasi pada indeks kursor. Tanpa menggunakan jquery
sumber
Tahan ALT dan tekan 0,9 dari keypad numerik. Ini bekerja di google-chrome
sumber
Saya membuat satu yang dapat Anda akses dengan elemen textarea yang Anda suka:
Dan elemennya akan terlihat seperti ini:
sumber
Cara paling sederhana yang saya temukan untuk melakukannya di browser modern dengan vanilla JavaScript adalah:
Perhatikan bahwa saya menggunakan banyak fitur ES6 dalam cuplikan ini demi kesederhanaan, Anda mungkin ingin mengubahnya (dengan Babel atau TypeScript) sebelum menggunakannya.
sumber
Jawaban di atas semua menghapus riwayat. Bagi siapa pun yang mencari solusi yang tidak melakukan itu, saya menghabiskan satu jam terakhir membuat kode berikut untuk Chrome:
Singkatnya, tab dimasukkan di awal garis yang dipilih.
JSFiddle: http://jsfiddle.net/iausallc/5Lnabspr/11/
Intisari: https://gist.github.com/iautomation/e53647be326cb7d7112d
Contoh penggunaan:
$('textarea').enableTabs('\t')
Cons: Hanya berfungsi di Chrome apa adanya.
sumber
Ada perpustakaan di Github untuk dukungan tab di area teks Anda oleh wjbryant: Tab Override
Begini Cara kerjanya:
sumber
Sebagai opsi untuk kode kasdega di atas, alih-alih menambahkan tab ke nilai saat ini, Anda dapat memasukkan karakter pada titik kursor saat ini. Ini memiliki manfaat:
jadi gantikan
dengan
sumber
sumber
Coba fungsi jQuery sederhana ini:
sumber
Saya harus membuat fungsi untuk melakukan hal yang sama, Mudah digunakan, cukup salin kode ini ke skrip Anda dan gunakan:
enableTab( HTMLElement )
HTML elemen menjadi sesuatu sepertidocument.getElementById( id )
Kode tersebut adalah:
sumber
Setiap input elemen textarea memiliki acara onkeydown. Dalam pengendali event, Anda dapat mencegah reaksi default tombol tab dengan menggunakan event.preventDefault () setiap kali event.keyCode adalah 9.
Kemudian letakkan tanda tab di posisi yang benar:
html
sumber
sumber
Skrip mandiri sederhana:
sumber
Jika Anda benar-benar membutuhkan tab, salin tab dari kata atau notepad dan tempel di kotak teks di mana Anda menginginkannya
1 2 3
12 22 33
Sayangnya saya pikir mereka menghapus tab dari komentar ini :) Akan ditampilkan sebagai% 09 di POST atau GET Anda
sumber