Saya mendapatkan formulir HTML5 berikut: http://jsfiddle.net/nfgfP/
<form id="form" onsubmit="return(login())">
<input name="username" placeholder="Username" required />
<input name="pass" type="password" placeholder="Password" required/>
<br/>Remember me: <input type="checkbox" name="remember" value="true" /><br/>
<input type="submit" name="submit" value="Log In"/>
Saat ini ketika saya menekan enter ketika keduanya kosong, kotak popup muncul mengatakan "Silakan isi bidang ini". Bagaimana cara saya mengubah pesan default menjadi "Bidang ini tidak dapat dibiarkan kosong"?
EDIT: Juga perhatikan bahwa pesan kesalahan bidang kata sandi jenis ini sederhana *****
. Untuk membuat ulang ini beri nilai pada nama pengguna dan tekan kirim.
EDIT : Saya menggunakan Chrome 10 untuk pengujian. Silakan lakukan hal yang sama
javascript
html
forms
validation
Skizit
sumber
sumber
Jawaban:
Gunakan
setCustomValidity
:Saya berubah menjadi JavaScript vanilla dari Mootools seperti yang disarankan oleh @itpastorn di komentar, tetapi Anda harus dapat bekerja di luar setara Mootools jika perlu.
Edit
Saya telah memperbarui kode di sini karena
setCustomValidity
berfungsi sedikit berbeda dengan apa yang saya pahami ketika saya awalnya menjawab. JikasetCustomValidity
diatur ke selain string kosong itu akan menyebabkan bidang dianggap tidak valid; karena itu Anda harus menghapusnya sebelum menguji validitas, Anda tidak bisa hanya mengatur dan melupakannya.Sunting lebih lanjut
Seperti yang ditunjukkan dalam komentar @ thomasvdb di bawah ini, Anda perlu menghapus validitas khusus dalam beberapa kejadian di luar
invalid
jika tidak, mungkin ada pass tambahan melaluioninvalid
handler untuk menghapusnya.sumber
input
acara tersebut. Saat ini hanya dibersihkan jikainvalid
acara dipecat.$("")
mengembalikan array objek, bahkan jika hanya ada satu.$("")[i]
kemungkinan besar apa yang Anda inginkan.Berikut adalah kode untuk menangani Pesan Kesalahan Khusus dalam HTML5
Bagian ini penting karena menyembunyikan pesan kesalahan ketika pengguna memasukkan data baru:
sumber
Sangat mudah untuk mengontrol pesan khusus dengan bantuan
HTML5
acaraoninvalid
Ini kode:
Ini yang paling penting:
sumber
onchange="this.setCustomValidity('')"
bug akan hilang. Periksa jawaban saya di bawah ini.oninput
sebagai gantionvalid
.oninput
adalah solusi yang lebih universal,onvalid
tidak bekerja bahkan di Chrome untuk saya.Catatan: Ini tidak lagi berfungsi di Chrome, tidak diuji di peramban lain. Lihat hasil edit di bawah. Jawaban ini ditinggalkan di sini untuk referensi sejarah.
Jika Anda merasa bahwa string validasi benar-benar tidak boleh diatur oleh kode, Anda dapat mengatur atribut judul elemen input Anda untuk membaca "Bidang ini tidak dapat dibiarkan kosong". (Bekerja di Chrome 10)
Lihat http://jsfiddle.net/kaleb/nfgfP/8/
Dan di Firefox, Anda dapat menambahkan atribut ini:
Edit
Ini tampaknya telah berubah sejak saya awalnya menulis jawaban ini. Sekarang menambahkan judul tidak mengubah pesan validitas, itu hanya menambahkan addendum ke pesan. Biola di atas masih berlaku.
Edit 2
Chrome sekarang tidak melakukan apa pun dengan atribut title pada Chrome 51. Saya tidak yakin versi mana yang diubah.
sumber
x-moz-errormessage="This field should not be left blank."
Sangat mudah untuk mengontrol pesan khusus dengan bantuan
HTML5
oninvalid
acaraIni kodenya:
sumber
Dengan mengatur dan membatalkan pengaturan
setCustomValidity
pada waktu yang tepat, pesan validasi akan berfungsi dengan sempurna.Saya menggunakan
onchange
alih-alihoninput
yang lebih umum dan terjadi ketika nilainya diubah dalam kondisi apa pun bahkan melalui JavaScript.sumber
onInvalid={(e) => { e.target.setCustomValidity('foo') }} onChange={(e) => { e.target.setCustomValidity('') }}
.e
mungkin nol, misalnya ketika opsi dihapus dari bidang Pilih Bereaksi. Jangan lupa untuk memeriksa itu.onChange
danonInvalid
sebagaiinputProps={{ onInvalid: …, onChange: …, }}
type='email'
sedikit lebih sulit untuk mengobati, karena menggunakansetCustomValidity
setcustomError: true
kee.target.validity
bahkan jika input tersebut valid. Saya mencoba mencari cara untuk memperbaikinya.Saya telah membuat perpustakaan kecil untuk memudahkan mengubah dan menerjemahkan pesan kesalahan. Anda bahkan dapat mengubah teks berdasarkan jenis kesalahan yang saat ini tidak tersedia menggunakan
title
di Chrome ataux-moz-errormessage
di Firefox. Go check it out di GitHub , dan memberikan umpan balik.Ini digunakan seperti:
Ada demo yang tersedia di jsFiddle .
sumber
Coba yang ini, lebih baik dan teruji:
HTML:
JAVASCRIPT:
Demo:
http://jsfiddle.net/patelriki13/Sqq8e/
sumber
Cara termudah dan terbersih yang saya temukan adalah menggunakan atribut data untuk menyimpan kesalahan khusus Anda. Uji simpul untuk validitas dan atasi kesalahan dengan menggunakan beberapa html khusus.
le javascript
dan beberapa HTML5 super
sumber
A-z
izinkan '[', '\', ']', '^', '_', dan '`'.Solusi untuk mencegah pesan kesalahan Google Chrome pada input setiap simbol:
sumber
Saya punya satu-satunya solusi vanilla js yang lebih sederhana:
Untuk kotak centang:
Untuk input:
sumber
Mengadaptasi jawaban Salar ke JSX dan React, saya perhatikan bahwa React Select tidak berperilaku seperti
<input/>
bidang tentang validasi. Tampaknya, beberapa solusi diperlukan untuk hanya menampilkan pesan khusus dan agar tidak muncul pada waktu yang tidak nyaman.Saya telah mengangkat masalah di sini , jika itu membantu apa pun. Berikut adalah CodeSandbox dengan contoh yang berfungsi, dan kode paling penting di sana direproduksi di sini:
sumber
Oke, oninvalid berfungsi dengan baik tetapi itu menunjukkan kesalahan bahkan jika pengguna memasukkan data yang valid. Jadi saya telah menggunakan di bawah ini untuk mengatasinya, berharap itu akan bekerja untuk Anda juga,
oninvalid="this.setCustomValidity('Your custom message.')"
onkeyup="setCustomValidity('')"
sumber
Dapat dengan mudah ditangani dengan hanya menempatkan 'judul' dengan bidang:
sumber