Di formulir saya, saya ingin menggunakan tipe formulir HTML5 baru, misalnya <input type="url" />
( info lebih lanjut tentang jenis di sini ).
Masalahnya adalah Chrome ingin menjadi sangat membantu dan memvalidasi elemen-elemen ini untuk saya, kecuali bahwa itu menyebalkan. Jika gagal validasi bawaan, tidak ada pesan atau indikasi selain elemen mendapatkan fokus. Saya lebih suka elemen URL "http://"
, dan validasi khusus saya sendiri hanya memperlakukan nilai-nilai itu sebagai string kosong, namun Chrome menolaknya. Jika saya bisa mengubah aturan validasinya, itu akan berhasil juga.
Saya tahu saya bisa saja kembali menggunakan type="text"
tetapi saya ingin perangkat tambahan yang bagus menggunakan penawaran jenis baru ini (mis.: Secara otomatis beralih ke tata letak keyboard khusus pada perangkat seluler):
Jadi, apakah ada cara untuk mematikan atau menyesuaikan validasi otomatis?
sumber
inputmode
atribut , yang - jika saya memahami apa yang saya baca dengan benar - dapat digunakan untuk menentukan jenis keyboard apa yang harus ditawarkan kepada pengguna ketika mereka berinteraksi dengan bidang, tanpa juga menyiratkan aturan validasi apa pun. Di beberapa titik di masa depan, menggunakaninputmode
atribut sebagai gantitype
atribut mungkin akan menjadi solusi yang tepat untuk masalah ini - tetapi belum.$('[inputmode]').each(function () { this.attr({type: this.attr('inputmode'), novalidate: true}) });
inputmode
akan. Melakukan hal-hal dengan cara Anda, Anda masih tidak bisa (misalnya) membaca nilai-nilai non-numerik yang diketik pengguna ke dalam kotak input jenisnumber
. Misalnya, coba ketikkan sesuatu yang bukan angka ke dalam kotak teks di biola ini dan klik tombolnya.<input type='number'>
sekali tidak menerima nilai non-numerik?Jawaban:
Jika Anda ingin menonaktifkan validasi sisi klien untuk formulir di HTML5, tambahkan atribut novalidate ke elemen formulir. Ex:
Lihat https://www.w3.org/TR/html5/sec-forms.html#element-attrdef-form-novalidate
sumber
novalidate="novalidate"
dannovalidate=""
juga sintaks yang valid.novalidate="novalidate"
metode ketika Anda mengaturnovalidate => true
dalam$options
array dariFormHelper::create()
. Terima kasih bassim untuk info tambahan :)Saya telah membaca spesifikasi dan melakukan beberapa pengujian di Chrome, dan jika Anda menangkap peristiwa "tidak valid" dan mengembalikan false yang tampaknya memungkinkan pengiriman formulir.
Saya menggunakan jquery, dengan HTML ini.
Saya belum menguji ini di browser lain.
sumber
invalid
acara dan mengembalikan false tidak membiarkan formulir dikirimkan.Saya hanya ingin menambahkan bahwa menggunakan atribut novalidate di formulir Anda hanya akan mencegah browser mengirim formulir. Browser masih mengevaluasi data dan menambahkan kelas pseudo: valid dan: tidak valid.
Saya menemukan ini karena kelas pseudo yang valid dan tidak valid adalah bagian dari stylesheet boilerplate HTML5 yang telah saya gunakan. Saya baru saja menghapus entri dalam file CSS yang terkait dengan kelas pseudo. Jika ada yang menemukan solusi lain, beri tahu saya.
sumber
<form action="" method="" class="" id="" novalidate>
)Solusi terbaik adalah dengan menggunakan input teks dan menambahkan atribut inputmode = "url" untuk menyediakan fasilitas keyboard URL. Spesifikasi HTML5 dianggap untuk tujuan ini. Jika Anda tetap mengetik = "url" Anda mendapatkan validasi sintaks yang tidak berguna dalam setiap kasus (lebih baik untuk memeriksa apakah ia mengembalikan kesalahan 404 daripada sintaks yang cukup permisif dan tidak banyak membantu).
Anda juga memiliki kemungkinan untuk mengganti pola default dengan pola atribut = "https?: //.+" misalnya menjadi lebih permisif.
Menempatkan atribut novalidate ke formulir bukan jawaban yang tepat untuk pertanyaan yang diajukan karena menghapus validasi untuk semua bidang dalam formulir dan Anda mungkin ingin tetap validasi untuk bidang email misalnya.
Menggunakan jQuery untuk menonaktifkan validasi juga merupakan solusi buruk karena harus benar-benar berfungsi tanpa JavaScript.
Dalam kasus saya, saya meletakkan elemen pilih dengan 2 opsi (http: // atau https: //) sebelum input URL karena saya hanya perlu situs web (dan tidak ada ftp: // atau hal lainnya). Dengan cara ini saya menghindari mengetikkan awalan aneh ini (penyesalan terbesar dari Tim Berners-Lee dan mungkin sumber utama kesalahan sintaksis URL) dan saya menggunakan input teks sederhana dengan inputmode = "url" dengan placeholder (tanpa HTTP). Saya menggunakan jQuery dan skrip sisi server untuk memvalidasi keberadaan nyata situs web (no 404) dan untuk menghapus awalan HTTP jika dimasukkan (saya menghindari menggunakan pola seperti pola = "^ ((? Http).) * $" untuk mencegah menempatkan awalan karena saya pikir lebih baik menjadi lebih permisif)
sumber
Alih-alih mencoba melakukan penghentian di sekitar validasi browser, Anda bisa menjadikan
http://
in sebagai teks placeholder. Ini dari halaman yang Anda tautkan:Ini tidak akan persis sama karena tidak akan memberikan "titik awal" bagi pengguna, tapi setidaknya setengah jalan.
sumber
Saya menemukan solusi untuk Chrome dengan CSS pemilih berikut ini tanpa melewati formulir verifikasi asli yang bisa sangat berguna.
Dengan cara ini, Anda juga dapat menyesuaikan pesan Anda ...
Saya mendapat solusinya di halaman ini: http://trac.webkit.org/wiki/Styling%20Form%20Controls
sumber
Cukup gunakan novalidate di formulir Anda.
Bersulang!!!
sumber
Berikut adalah fungsi yang saya gunakan untuk mencegah chrome dan opera menampilkan dialog input yang tidak valid bahkan ketika menggunakan novalidate.
sumber
Anda dapat menambahkan beberapa javascript untuk mengatasi gelembung validasi yang menjengkelkan dan menambahkan validator Anda sendiri.
sumber
Jika Anda menandai elemen formulir
required=""
saatnovalidate=""
itu tidak membantu.Cara untuk menghindari
required
validasi adalah dengan menonaktifkan elemen .sumber
Anda dapat memasang ekstensi krom sederhana dan cukup menonaktifkan validasi dengan cepat https://chrome.google.com/webstore/detail/html5-form-validation-err/dcpagcgkpeflhhampddilklcnjdjlmlb/related
secara default semuanya akan berfungsi sebagai default, tetapi Anda akan dapat menonaktifkan validasi HTML5 dengan satu klik pada ikon ekstensi pada toolbar
sumber