Come posso modificare o rimuovere i messaggi di errore predefiniti per la convalida del modulo HTML5?


142

Ad esempio ho un textfield. Il campo è obbligatorio, sono richiesti solo numeri e la lunghezza del valore deve essere 10. Quando provo a inviare un modulo con un valore di lunghezza 5, viene visualizzato il messaggio di errore predefinito:Please match the requested format

<input type="text" required="" pattern="[0-9]{10}" value="">
  1. Come posso modificare i messaggi predefiniti degli errori di convalida del modulo HTML 5?
  2. Se è possibile eseguire il primo punto, esiste un modo per creare alcuni file delle proprietà e impostare messaggi di errore personalizzati in tali file?

1
Ho trovato un bug sulla risposta di Mahoor13, non funziona in loop, quindi l'ho risolto e do una risposta con qualche correzione, che puoi trovare nella sezione delle risposte. Ecco il link stackoverflow.com/questions/10361460/...
Darshan Gorasia

Risposte:


213

Ho trovato un bug nella risposta di Ankur e l'ho risolto con questa correzione:

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

Il bug visualizzato quando si impostano dati di input non validi, quindi si corregge l'input e si invia il modulo. oops! non puoi farlo. L'ho provato su Firefox e Chrome


18
Suggerisco di non utilizzare eventi in linea. Non è una buona pratica.
Jared,

2
@ Mahoor13 L'ho scritto in modo simile, ma non convalida mai. Puoi darmi un suggerimento? jsfiddle.net/2USxy
Sliq

1
C'è anche una proprietà personalizzata di Firefox che puoi aggiungere che funziona bene: x-moz-errormessage = "Inserisci solo i numeri"
coliff

4
meglio usare "onkeyup" invece di "onchange" per vedere se l'input è valido o meno.
Jam Ville

4
Questo ha il seguente problema (almeno in Chrome 55): quando viene visualizzato il messaggio non valido, se l'utente mantiene attivo il campo non valido (senza fare clic) e modifica il campo, il messaggio continua a essere visualizzato, anche quando il campo è valido, è necessario per focalizzare o attivare l'invio.
leonbloy,

96

Quando si utilizza pattern = mostrerà tutto ciò che si inserisce nell'attributo title, quindi non è richiesto alcun JS:

<input type="text" required="" pattern="[0-9]{10}" value="" title="This is an error message" />

9
Risposta molto bella. Ma come per tutte le cose HTML5, l'affidabilità dipende dal browser. Questa soluzione ha funzionato alla grande con FF 15 e Chrome 22, ma non con Safari 5. (Testato con OS X Lion)
james.garriss

1
Bella risposta, ma fai attenzione alla compatibilità con le versioni precedenti (o addirittura attuali) qui.
Bohney,

7
Quando imposto un titolo su "pippo" ottengo "Per favore abbina il formato richiesto. Pippo", quindi questo non funzionerà per me
Daan,

7
Il titolo è anche usato come testo della descrizione comandi al passaggio del mouse, quindi starei lontano da questo approccio.
fotijr

2
Il titolo viene utilizzato anche come testo della descrizione comandi al passaggio del mouse, quindi questo è probabilmente l'approccio migliore.
OdraCodificato il


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

Per impedire che il messaggio di convalida del browser venga visualizzato nel documento, con jQuery:

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

13

puoi rimuovere questo avviso nel modo seguente:

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

basta impostare il messaggio personalizzato su uno spazio vuoto



5

SetCustomValidity consente di modificare il messaggio di convalida predefinito. Ecco un semplice esempio di come utilizzarlo.

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

3

Ho trovato un modo per caso ora: è necessario utilizzare questo: errore di dati: ""

<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

Ho trovato un bug sulla risposta di Mahoor13, non funziona in loop quindi l'ho corretto con questa correzione:

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

Funzionerà perfettamente in loop.




2

Per impostare un messaggio di errore personalizzato per la convalida HTML 5, utilizzare,

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

e per rimuovere questo messaggio quando l'utente immette dati validi,

onkeyup="setCustomValidity('')"

Spero che questo funzioni per te. Godere ;)


0

Questo è un lavoro per me in 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')"

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.