Saat ini, jika orang tersebut menekan enterdi dalam area teks, formulir akan dikirimkan.
Bagus, aku mau itu.
Tetapi ketika mereka mengetik shift+ enter, saya ingin textarea pindah ke baris berikutnya:\n
Bagaimana saya bisa melakukannya di JQuery
JavaScript biasa atau sesederhana mungkin?
javascript
jquery
html
css
TIMEX
sumber
sumber
e.shiftKey
.shiftKey
properti acara .Jawaban:
Lebih baik gunakan solusi yang lebih sederhana:
Solusi Tim di bawah ini lebih baik saya sarankan menggunakan itu: https://stackoverflow.com/a/6015906/4031815
Solusi saya
Saya pikir Anda dapat melakukan sesuatu seperti ini ..
EDIT: Mengubah kode untuk bekerja terlepas dari posisi caret
Bagian pertama dari kode adalah untuk mendapatkan posisi tanda sisipan.
Ref: Bagaimana cara mendapatkan posisi kolom caret (bukan piksel) di textarea, dalam karakter, dari awal?
Dan kemudian mengganti nilai textarea yang sesuai saat Shift+ Enterbersama, kirimkan formulir jika Enterditekan sendirian.
Ini demo
sumber
event.keyCode == 13
) dan saya pikir Anda mungkin juga inginevent.preventDefault()
bukanevent.stopPropagation()
.event.stopPropagation()
saya bermaksud menghentikan beberapa kode lain yang mungkin telah ditulisnya untuk menyerahkan formulir.event.stopPropagation()
, itu akan mencegah acara dari menggelembung lebih jauh DOM tetapi tidak akan mencegah penekanan tombol dari melakukan tindakan standarnya memasukkan garis istirahat (meskipun sebenarnya dalamkeyup
saran sayaevent.preventDefault()
tidak akan melakukannya juga).carent
tidak didefinisikan, jika saya mengubahnya ke tanda sisipan menambahkan 2 baris baruSolusi mudah & elegan:
Pertama, menekan Enterdi dalam textarea tidak mengirimkan formulir kecuali Anda memiliki skrip untuk membuatnya melakukannya. Itulah perilaku yang diharapkan pengguna dan saya sarankan untuk tidak mengubahnya. Namun, jika Anda harus melakukan ini, pendekatan termudah adalah dengan menemukan skrip yang membuat Entermengirimkan formulir dan mengubahnya. Kode akan memiliki sesuatu seperti
... dan Anda bisa mengubahnya menjadi
Di sisi lain, jika Anda tidak memiliki akses ke kode ini karena alasan tertentu, Anda perlu melakukan yang berikut untuk membuatnya berfungsi di semua browser utama bahkan jika tanda sisipan tidak ada di akhir teks:
jsFiddle: http://jsfiddle.net/zd3gA/1/
Kode:
sumber
Sebagian besar jawaban ini terlalu rumit. Mengapa tidak mencobanya dengan cara ini?
Tidak main-main dengan posisi tanda sisipan atau mendorong line break ke JS. Pada dasarnya, fungsi tidak akan berjalan jika tombol shift ditekan, sehingga memungkinkan tombol enter / return untuk melakukan fungsi normalnya.
sumber
Kenapa tidak adil?
sumber
Gunakan plugin hotkey jQuery dan kode ini
sumber
Berikut ini adalah solusi AngularJS menggunakan ng-keyup jika ada yang memiliki masalah yang sama menggunakan AngularJS.
sumber
Menggunakan ReactJS ES6 di sini adalah cara paling sederhana
shift+ enterBaris Baru di posisi mana pun
enter Dicekal
sumber
Saya menemukan utas ini mencari cara untuk mengontrol Shift + tombol apa saja. Saya menempelkan solusi lain untuk membuat fungsi gabungan ini untuk mencapai apa yang saya butuhkan. Saya harap ini membantu orang lain.
sumber
Dalam kasus seseorang masih bertanya-tanya bagaimana melakukan ini tanpa jQuery.
HTML
<textarea id="description"></textarea>
Javascript
Vanilla JS
sumber
Saya menggunakan div dengan menambahkan contenteditable true daripada menggunakan textarea.
Semoga bisa membantu Anda.
sumber
Ini bekerja untuk saya!
sumber
menggunakan
ng-keyup
direktif dalam angularJS, hanya mengirim pesan dengan menekanEnter
tombol danShift+Enter
hanya akan mengambil baris baru.sumber