Bagaimana saya bisa mengubah atau menghapus pesan kesalahan default validasi form HTML5?

142

Misalnya saya punya textfield. Bidang ini wajib, hanya nomor yang diperlukan dan panjang nilainya harus 10. Ketika saya mencoba mengirim formulir dengan nilai yang panjangnya 5, pesan kesalahan standar muncul:Please match the requested format

<input type="text" required="" pattern="[0-9]{10}" value="">
  1. Bagaimana saya bisa mengubah kesalahan validasi form HTML 5 pesan default?
  2. Jika poin pertama dapat dilakukan, apakah ada cara untuk membuat beberapa file properti dan mengatur file kesalahan pesan kustom?
emilan
sumber
1
Saya menemukan bug pada jawaban Mahoor13, itu tidak berfungsi dalam lingkaran jadi saya telah memperbaikinya & memberikan jawaban dengan beberapa koreksi, yang dapat Anda temukan di bawah bagian jawaban. Berikut ini tautan stackoverflow.com/questions/10361460/...
Darshan Gorasia

Jawaban:

213

Saya menemukan bug pada jawaban Ankur dan saya telah memperbaikinya dengan koreksi ini:

 <input type="text" pattern="[a-zA-Z]+"
    oninvalid="setCustomValidity('Plz enter on Alphabets ')"
    onchange="try{setCustomValidity('')}catch(e){}" />

Bug terlihat saat Anda mengatur data input yang tidak valid, lalu koreksi input dan kirim formulir. Ups! kamu tidak bisa melakukan ini Saya sudah mengujinya di firefox dan chrome

Mahoor13
sumber
18
Saya menyarankan agar tidak menggunakan acara inline. Itu bukan praktik yang baik.
Jared
2
@ Mahoor13 Saya telah menulisnya mirip dengan itu, tetapi tidak pernah valid. Bisakah Anda memberi petunjuk? jsfiddle.net/2USxy
Sliq
1
Ada juga properti Firefox khusus yang dapat Anda tambahkan yang berfungsi dengan baik: x-moz-errormessage = "Silakan masukkan angka saja"
coliff
4
lebih baik menggunakan "onkeyup" daripada "onchange" untuk melihat secara efektif apakah inputnya valid atau tidak.
Jam Ville
4
Ini memiliki masalah berikut (setidaknya di Chrome 55): ketika pesan yang tidak valid muncul, jika pengguna tetap fokus di bidang yang tidak valid (tanpa mengklik) dan mengedit bidang pesan terus muncul - bahkan ketika bidang itu valid - itu adalah diperlukan untuk fokus atau memicu pengiriman.
leonbloy
96

Saat menggunakan pattern = itu akan menampilkan apa pun yang Anda masukkan ke dalam title attrib, jadi tidak perlu JS lakukan:

<input type="text" required="" pattern="[0-9]{10}" value="" title="This is an error message" />
HTF
sumber
9
Jawaban yang sangat bagus Tetapi seperti halnya semua hal HTML5, keandalan bergantung pada browser. Solusi ini bekerja sangat baik dengan FF 15 dan Chrome 22, tetapi tidak dengan Safari 5. (Diuji dengan OS X Lion)
james.garriss
1
Jawaban yang bagus, tapi hati-hati tentang kompatibilitas mundur (atau bahkan saat ini) di sini.
bohney
7
Ketika saya menetapkan judul menjadi "foo", saya mendapatkan "Silakan cocok dengan format yang diminta. Foo", jadi ini tidak akan berfungsi untuk saya
Daan
7
Judul juga digunakan sebagai teks tooltip pada mouse hover, jadi saya akan menjauh dari pendekatan ini.
foto
2
Judul juga digunakan sebagai teks tooltip pada mouse hover, jadi ini mungkin pendekatan terbaik.
OdraEncoded
35
<input type="text" pattern="[a-zA-Z]+"
oninvalid="setCustomValidity('Plz enter on Alphabets ')" />

Saya menemukan kode ini di pos lain.

Ankur Loriya
sumber
terima kasih, itu berhasil untuk saya. Padahal saya tidak menemukan posting atau blog atau situs yang menyebutkan ini.
user219628
1
Perhatikan postingan berikut ketika mempertimbangkan menggunakan setCustomValitidy stackoverflow.com/questions/16867407/…
Konstantinos Chertouras
15

HTML:

<input type="text" pattern="[0-9]{10}" oninvalid="InvalidMsg(this);" name="email" oninput="InvalidMsg(this);"  />

JAVASCRIPT:

function InvalidMsg(textbox) {

     if(textbox.validity.patternMismatch){
        textbox.setCustomValidity('please enter 10 numeric value.');
    }    
    else {
        textbox.setCustomValidity('');
    }
    return true;
}

Fiddle Demo

Rikin Patel
sumber
14

Untuk mencegah pesan validasi browser muncul di dokumen Anda, dengan jQuery:

$('input, select, textarea').on("invalid", function(e) {
    e.preventDefault();
});
Luca Fagioli
sumber
13

Anda dapat menghapus lansiran ini dengan melakukan hal berikut:

<input type="text" pattern="[a-zA-Z]+"
    oninvalid="setCustomValidity(' ')"
/>

cukup atur pesan khusus ke satu ruang kosong

pengguna3894381
sumber
5

SetCustomValidity memungkinkan Anda mengubah pesan validasi default. Berikut adalah contoh sederhana tentang cara menggunakannya.

var age  =  document.getElementById('age');
    age.form.onsubmit = function () {
    age.setCustomValidity("This is not a valid age.");
 };
kta
sumber
3

Saya Menemukan Cara Secara Tidak sengaja Sekarang: Anda perlu menggunakan ini: data-error: ""

<input type="username" class="form-control" name="username" value=""
placeholder="the least 4 character"
data-minlength="4" data-minlength-error="the least 4 character"
data-error="This is a custom Errot Text fot patern and fill blank"
max-length="15" pattern="[A-Za-z0-9]{4,}"
title="4~15 character" required/>
Mohammad Shojaa
sumber
3

Saya menemukan bug pada jawaban Mahoor13, itu tidak berfungsi dalam lingkaran jadi saya telah memperbaikinya dengan koreksi ini:

HTML:

<input type="email" id="eid" name="email_field" oninput="check(this)">

Javascript:

function check(input) {  
    if(input.validity.typeMismatch){  
        input.setCustomValidity("Dude '" + input.value + "' is not a valid email. Enter something nice!!");  
    }  
    else {  
        input.setCustomValidity("");  
    }                 
}  

Ini akan berjalan dengan sempurna dalam lingkaran.

Darshan Gorasia
sumber
2

Seperti yang Anda lihat di sini:

html5 oninvalid tidak berfungsi setelah memperbaiki bidang input

Baik untuk Anda dimasukkan ke dalam cara itu, karena ketika Anda memperbaiki kesalahan menghilang pesan peringatan.

<input type="text" pattern="[a-zA-Z]+"
oninvalid="this.setCustomValidity(this.willValidate?'':'your custom message')" />
Jonathan Machado
sumber
2

Untuk mengatur pesan kesalahan khusus untuk penggunaan validasi HTML 5,

oninvalid="this.setCustomValidity('Your custom message goes here.')"

dan untuk menghapus pesan ini saat pengguna memasukkan penggunaan data yang valid,

onkeyup="setCustomValidity('')"

Semoga ini berhasil untuk Anda. Nikmati ;)

Umesh Patil
sumber
0

Ini berfungsi untuk saya di Chrome

    <input type="text" name="product_title" class="form-control" 
required placeholder="Product Name" value="" pattern="([A-z0-9À-ž\s]){2,}"
oninvalid="setCustomValidity('Please enter on Producut Name at least 2 characters long')"
Sahan Pasindu Nirmal
sumber