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?

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


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" />

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


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


14

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

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

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



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.");
 };

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/>

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.




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 ;)


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')"

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.