Saya memiliki teks hantu di bidang teks yang hilang saat Anda fokus pada mereka menggunakan atribut placeholder HTML5:
<input type="text" name="email" placeholder="Enter email"/>
Saya ingin menggunakan mekanisme yang sama untuk memiliki teks tempat penampung multiline di sebuah textarea, mungkin seperti ini:
<textarea name="story" placeholder="Enter story\n next line\n more"></textarea>
Tapi itu \n
muncul dalam teks dan tidak menyebabkan baris baru ... Apakah ada cara untuk memiliki placeholder multiline?
UPDATE : Satu-satunya cara saya membuat ini berfungsi adalah menggunakan plugin jQuery Watermark , yang menerima HTML dalam teks placeholder:
$('.textarea_class').watermark('Enter story<br/> * newline', {fallback: false});
white-space
untuk memastikannya ditetapkan dengan benar misalnya pra-bungkus
bekerja di mana saja kecuali Safari.Jawaban:
Untuk
<textarea>
s spec khusus menguraikan bahwa tombol kembali + jeda baris dalam atribut placeholder HARUS diterjemahkan sebagai linebreaks oleh browser.Juga tercermin pada MDN: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/textarea#attr-placeholder
FWIW, ketika saya mencoba Chrome 63.0.3239.132, itu memang berfungsi seperti yang seharusnya.
sumber
Pada sebagian besar (lihat detail di bawah) browser, mengedit placeholder di javascript memungkinkan placeholder multiline. Seperti yang telah dikatakan, itu tidak sesuai dengan spesifikasi dan Anda seharusnya tidak mengharapkannya bekerja di masa depan (edit: itu berfungsi).
Contoh ini menggantikan semua placeholder textarea multiline.
Cuplikan JsFiddle .
Hasil yang diharapkanBerdasarkan komentar tampaknya beberapa browser menerima hack ini dan yang lainnya tidak.
Ini adalah hasil dari tes yang saya jalankan (dengan browsertshots dan browserstack )
Menyatu dengan statistik tesis ini, ini berarti bahwa ia berfungsi pada sekitar 88,7% dari browser yang digunakan saat ini (Oktober 2015) .
Pembaruan : Hari ini, ia berfungsi pada setidaknya 94,4% dari browser yang digunakan saat ini (Juli 2018) .
sumber
multiline
tidakmultiligne
WKWebView
. Selanjutnya, browser apa pun di iOS tidak akan meretas hack ini dengan benar sampai akhirnyaWKWebView
.Saya menemukan bahwa jika Anda menggunakan banyak ruang, browser akan membungkusnya dengan benar. Jangan khawatir tentang menggunakan jumlah spasi yang pasti, cukup lempar banyak di sana, dan browser harus membungkus dengan benar ke karakter non-spasi pertama pada baris berikutnya.
sumber
Sebenarnya ada peretasan yang memungkinkan untuk menambahkan tempat penampung multiline di peramban WebKit, Chrome digunakan untuk bekerja tetapi dalam versi yang lebih baru mereka menghapusnya:
Pertama tambahkan baris pertama placeholder Anda ke html5 seperti biasa
kemudian tambahkan sisa baris dengan css:
Jika Anda ingin menjaga dialog di satu tempat, Anda dapat mencoba yang berikut ini. Kelemahan dari ini adalah browser lain selain chrome, safari, webkit-dll. bahkan tidak menunjukkan baris pertama:
kemudian tambahkan sisa baris dengan css:
Demo Fiddle
Akan sangat bagus, jika demikian bisa mendapatkan demo serupa bekerja di Firefox.
sumber
Jika Anda menggunakan AngularJS, Anda bisa menggunakan kawat gigi untuk meletakkan apa pun yang Anda suka di dalamnya: Ini biola.
sumber
Menurut MDN ,
Ini berarti bahwa jika Anda hanya melompat ke baris baru, itu harus diterjemahkan dengan benar. Yaitu
harus membuat seperti ini:
sumber
The HTML5 spesifikasi tegas menolak baris baru di bidang tempat dudukan. Versi Webkit / akan / menyisipkan baris baru saat disajikan dengan umpan baris di placeholder, namun ini adalah perilaku yang salah dan tidak boleh diandalkan.
Saya kira paragraf tidak cukup singkat untuk w3;)
sumber
Reaksi:
Jika Anda menggunakan Bereaksi, Anda dapat melakukannya sebagai berikut:
sumber
Jika Anda
textarea
memiliki lebar statis, Anda dapat menggunakan kombinasi ruang tidak putus dan pembungkus teks otomatis. Cukup ganti spasi ke nbsp untuk setiap baris dan pastikan bahwa dua garis tetangga tidak dapat masuk ke dalam satu baris. Dalam praktekline length > cols/2
.Ini bukan cara terbaik, tetapi bisa menjadi satu-satunya solusi lintas-browser.
sumber
Anda dapat mencoba menggunakan CSS, itu berfungsi untuk saya. Atribut
placeholder=" "
diperlukan di sini.sumber
dalam php dengan fungsi chr (13):
sumber
Saya tidak berpikir itu mungkin dengan html / css saja. Mungkin dimungkinkan menggunakan JavaScript atau sejenis hack lainnya - ruang ekstra untuk mendorong teks ke baris berikutnya, dll.
sumber
Bootstrap + contenteditable + placeholder multiline
Demo: https://jsfiddle.net/39mptojs/4/
berdasarkan jawaban @cyrbil dan @daniel
Menggunakan Bootstrap, jQuery, dan https://github.com/gr2m/bootstrap-expandable-input untuk mengaktifkan placeholder di contenteditable.
Menggunakan javascript "placeholder replace" dan menambahkan "white-space: pre" ke css, placeholder multiline ditampilkan.
Html:
Javascript:
Css:
sumber
Solusi watermark pada postingan asli berfungsi dengan baik. Terimakasih untuk ini. Jika ada yang membutuhkannya, berikut adalah arahan sudut untuknya.
sumber