Saya memiliki contenteditable
elemen, dan setiap kali saya mengetik beberapa barang dan menekannya ENTER
menciptakan yang baru <div>
dan menempatkan teks baris baru di sana. Saya tidak suka yang ini sedikit pun.
Apakah mungkin untuk mencegah hal ini terjadi atau setidaknya hanya menggantinya dengan <br>
?
Inilah demo http://jsfiddle.net/jDvau/
Catatan: Ini bukan masalah di firefox.
Jawaban:
Coba ini:
Klik di sini untuk demo
sumber
Anda dapat melakukan ini hanya dengan perubahan CSS:
http://jsfiddle.net/ayiem999/HW43Q/
sumber
Menambah gaya
display:inline-block;
kecontenteditable
, itu tidak akan menghasilkandiv
,p
danspan
secara otomatis di Chrome.sumber
*[contenteditable="true"]{display: inline-block;}
<p></p>
:(Coba ini:
http://jsfiddle.net/rooseve/jDvau/3/
sumber
input
tidak terpicu ketika Anda menekan enter. Sebuah solusi sederhana: tambahkan sth like$(this).trigger('input')
insertHTML
solusi melakukan beberapa hal-hal aneh ketika ada bersarangcontenteditable
elemen, solusi circumvents Anda bahwa tetapi ada beberapa masalah yang lebih, saya menambahkan sebagai solusi baru mungkin.Itu menimpa perilaku default untuk memiliki paragraf sebagai gantinya.
Pada chrome, perilaku default pada enter adalah:
Dengan perintah itu akan terjadi
Sekarang karena lebih linier, Anda hanya
<br>
perlu melakukannya dengan mudah.sumber
Gunakan shift+ enteralih-alih enterhanya memasukkan satu
<br>
tag atau membungkus teks Anda dengan<p>
tag.sumber
Cara
contenteditable
berperilaku ketika Anda menekan entertergantung pada browser, yang<div>
terjadi pada webkit (chrome, safari) dan IE.Saya berjuang dengan ini beberapa bulan lalu dan saya memperbaikinya dengan cara ini:
Saya harap ini akan membantu, dan maaf untuk bahasa Inggris saya jika tidak sejelas yang diperlukan.
EDIT : Koreksi fungsi jQuery dihapus
jQuery.browser
sumber
jQuery.browser
bukan lagi bagian dari jQuery.navigator.userAgent.indexOf("msie") > 0
dannavigator.userAgent.indexOf("webkit") > 0
if( ( e.keyCode || e.witch ) == 13 ) { ... }
perluif (e.keyCode === 13 || e.which === 13) { ... }
Anda dapat memiliki
<p>
tag terpisah untuk setiap baris daripada menggunakan<br>
tag dan mendapatkan kompatibilitas browser yang lebih besar di luar kotak.Untuk melakukan ini, letakkan
<p>
tag dengan beberapa teks default di dalam div yang dapat diedit.Misalnya, alih-alih:
Menggunakan:
jsfiddle
Diuji di Chrome, Firefox, dan Edge, dan yang kedua bekerja sama di masing-masing.
Namun, yang pertama membuat div di Chrome, membuat jeda baris di Firefox, dan di Edge menciptakan div dan kursor dikembalikan ke awal div saat ini alih-alih pindah ke yang berikutnya.
Diuji di Chrome, Firefox, dan Edge.
sumber
Saya suka menggunakan perangkap tikus untuk hotkey handlling: https://craig.is/killing/mice
Lalu, saya baru saja mencegat acara masuk, menjalankan perintah insertLineBreak :
Ia bekerja menggunakan Chrome 75 dan elemen yang dapat diedit berikut:
Dimungkinkan juga untuk menggunakan insertHTML :
sumber
tambahkan mencegah default ke div
sumber
document.body.div
(Anda mungkin perlu memasukkan beberapa kode lain untuk memperbaikidiv
hanya ide umumnya)Saya akan menggunakan styling (Css) untuk memperbaiki masalah ini.
Firefox memang menambahkan break elemen blok
, sedangkan Chrome membungkus setiap bagian dalam tag. Anda css memberikan pads pad 10px bersama dengan warna latar belakang.
Atau, Anda dapat meniru efek yang diinginkan di jQuery:
Ini adalah garpu biola Anda http://jsfiddle.net/R4Jdz/7/
sumber
contenteditable
dan menggunakannya di tempat lainAnda dapat membungkus paragraf Anda dengan
<p>
tag misalnya akan muncul pada baris baru, bukan div Contoh:<div contenteditable="true"><p>Line</p></div>
Setelah memasukkan string baru:
<div contenteditable="true"><p>Line</p><p>New Line</p></div>
sumber
The
inserHTML
solusi perintah melakukan beberapa hal aneh ketika Anda memiliki bersarangcontenteditable
elemen.Saya mengambil beberapa ide dari beberapa jawaban di sini, dan ini tampaknya sesuai dengan kebutuhan saya untuk saat ini:
sumber
Coba gunakan ckeditor. Ini juga menyediakan pemformatan seperti ini di SOF.
https://github.com/galetahub/ckeditor
sumber
Pertama kita perlu menangkap setiap pengguna kunci masuk untuk melihat apakah masuk ditekan maka kita mencegah
<div>
penciptaan dan kita buat sendiri<br>
tag .Ada satu masalah, ketika kita membuatnya, kursor kita tetap pada posisi yang sama sehingga kita menggunakan API Pemilihan untuk menempatkan kursor kita di akhir.
Jangan lupa untuk menambahkan
<br>
tag di akhir teks Anda karena jika Anda tidak memasukkan entri pertama tidak akan membuat baris baru.Biola
sumber
Ini adalah editor HTML5 yang diarahkan oleh browser. Anda dapat membungkus teks Anda dengan
<p>...</p>
, maka setiap kali Anda menekan ENTER Anda dapatkan<p></p>
. Juga, editor bekerja dengan cara ini sehingga setiap kali Anda menekan SHIFT + ENTER, sisipan<br />
.Lihat ini: http://jsfiddle.net/ZQztJ/
sumber
Ini berfungsi di semua browser utama (Chrome, Firefox, Safari, Edge)
Ada satu ketidaknyamanan. Setelah Anda selesai mengedit, elemen-elemen tersebut mungkin mengandung akhiran
<br>
di dalamnya. Tetapi Anda dapat menambahkan kode untuk memotongnya jika perlu.Periksa jawaban ini untuk menghapus trailing
<br>
https://stackoverflow.com/a/61237737/670839sumber
Dimana
this
konteks aktual yang artinyadocument.getElementById('test');
.sumber
Cara lain untuk melakukannya
http://jsfiddle.net/jDvau/11/
sumber
Cegah pembuatan Div Baru di konten yang dapat diedit Div pada setiap tombol enter: Solusi yang saya temukan sangat sederhana:
Konten --- innerHTML ini mencegah pembuatan Div Baru di konten yang dapat diedit Div pada setiap tombol enter.
sumber
Pada Draft Editor W3C ada beberapa informasi tentang menambahkan status ke ContentEditable , dan untuk mencegah browser untuk menambahkan elemen baru saat menekan enter yang dapat Anda gunakan
plaintext-only
.sumber
Dimungkinkan untuk sepenuhnya mencegah perilaku ini.
Lihat biola ini
sumber