J'ai un formulaire avec plusieurs champs de saisie. J'ai mis des validations html5
<input type="text" name="topicName" id="topicName" required />
quand je soumets le formulaire sans remplir cette zone de texte, il affiche un message par défaut comme
"Please fill out this field"
Quelqu'un peut-il m'aider s'il vous plaît à modifier ce message?
J'ai un code javascript pour l'éditer, mais ça ne marche pas
$(document).ready(function() {
var elements = document.getElementsByName("topicName");
for (var i = 0; i < elements.length; i++) {
elements[i].oninvalid = function(e) {
e.target.setCustomValidity("");
if (!e.target.validity.valid) {
e.target.setCustomValidity("Please enter Room Topic Title");
}
};
elements[i].oninput = function(e) {
e.target.setCustomValidity("");
};
}
})
J'ai le formulaire HTML suivant
<form id="myform">
<input id="email" name="email" type="email" />
<input type="submit" />
</form>
Les messages de validation que je veux.
Champ obligatoire: Veuillez saisir une adresse électronique.
Email incorrect: 'tester @ .com' n'est pas une adresse email valide. ( ici, l'adresse e-mail saisie est affichée dans la zone de texte )
J'ai essayé ça.
function check(input) {
if(input.validity.typeMismatch){
input.setCustomValidity("'" + input.value + "' is not a Valid Email Address.");
}
else {
input.setCustomValidity("");
}
}
Cette fonction ne fonctionne pas correctement, avez-vous un autre moyen de le faire? Ce serait apprécié.
Puisque cette réponse a beaucoup retenu l'attention, voici un extrait de code configurable que j'ai créé:
/**
* @author ComFreek <https://stackoverflow.com/users/603003/comfreek>
* @link https://stackoverflow.com/a/16069817/603003
* @license MIT 2013-2015 ComFreek
* @license[dual licensed] CC BY-SA 3.0 2013-2015 ComFreek
* You MUST retain this license header!
*/
(function (exports) {
function valOrFunction(val, ctx, args) {
if (typeof val == "function") {
return val.apply(ctx, args);
} else {
return val;
}
}
function InvalidInputHelper(input, options) {
input.setCustomValidity(valOrFunction(options.defaultText, window, [input]));
function changeOrInput() {
if (input.value == "") {
input.setCustomValidity(valOrFunction(options.emptyText, window, [input]));
} else {
input.setCustomValidity("");
}
}
function invalid() {
if (input.value == "") {
input.setCustomValidity(valOrFunction(options.emptyText, window, [input]));
} else {
input.setCustomValidity(valOrFunction(options.invalidText, window, [input]));
}
}
input.addEventListener("change", changeOrInput);
input.addEventListener("input", changeOrInput);
input.addEventListener("invalid", invalid);
}
exports.InvalidInputHelper = InvalidInputHelper;
})(window);
→ jsFiddle
<input id="email" type="email" required="required" />
InvalidInputHelper(document.getElementById("email"), {
defaultText: "Please enter an email address!",
emptyText: "Please enter an email address!",
invalidText: function (input) {
return 'The email address "' + input.value + '" is invalid!';
}
});
defaultText
est affiché initialementemptyText
est affiché lorsque l'entrée est vide (a été effacée)invalidText
s'affiche lorsque l'entrée est marquée comme non valide par le navigateur (par exemple, lorsque l'adresse e-mail n'est pas valide)Vous pouvez affecter une chaîne ou une fonction à chacune des trois propriétés.
Si vous affectez une fonction, elle peut accepter une référence à l’élément d’entrée (noeud DOM) et elle doit renvoyer une chaîne qui est puis affiché comme message d'erreur.
Testé dans:
Vous pouvez voir l'ancienne révision ici: https://stackoverflow.com/revisions/16069817/6
Vous pouvez simplement y parvenir en utilisant un attribut non valide, consultez ce code de démonstration
<form>
<input type="email" pattern="[^@]*@[^@]" required oninvalid="this.setCustomValidity('Put here custom message')"/>
<input type="submit"/>
</form>
HTML:
<form id="myform">
<input id="email" oninvalid="InvalidMsg(this);" name="email" oninput="InvalidMsg(this);" type="email" required="required" />
<input type="submit" />
</form>
JAVASCRIPT:
function InvalidMsg(textbox) {
if (textbox.value == '') {
textbox.setCustomValidity('Required email address');
}
else if (textbox.validity.typeMismatch){{
textbox.setCustomValidity('please enter a valid email address');
}
else {
textbox.setCustomValidity('');
}
return true;
}
Démo:
Essaye ça:
$(function() {
var elements = document.getElementsByName("topicName");
for (var i = 0; i < elements.length; i++) {
elements[i].oninvalid = function(e) {
e.target.setCustomValidity("Please enter Room Topic Title");
};
}
})
J'ai testé cela dans Chrome et FF et cela a fonctionné dans les deux navigateurs.
Mec, je n'ai jamais fait ça en HTML 5 mais je vais essayer. Jetez un oeil sur ce violon.
J'ai utilisé jQuery, des événements et propriétés natifs HTML5 et un attribut personnalisé sur la balise input (cela peut poser problème si vous essayez de valider votre code). Je n'ai pas testé tous les navigateurs, mais je pense que cela peut fonctionner.
Voici le code JavaScript de validation de champ avec jQuery:
$(document).ready(function()
{
$('input[required], input[required="required"]').each(function(i, e)
{
e.oninput = function(el)
{
el.target.setCustomValidity("");
if (el.target.type == "email")
{
if (el.target.validity.patternMismatch)
{
el.target.setCustomValidity("E-mail format invalid.");
if (el.target.validity.typeMismatch)
{
el.target.setCustomValidity("An e-mail address must be given.");
}
}
}
};
e.oninvalid = function(el)
{
el.target.setCustomValidity(!el.target.validity.valid ? e.attributes.requiredmessage.value : "");
};
});
});
Agréable. Voici le formulaire simple HTML:
<form method="post" action="" id="validation">
<input type="text" id="name" name="name" required="required" requiredmessage="Name is required." />
<input type="email" id="email" name="email" required="required" requiredmessage="A valid E-mail address is required." pattern="^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9]+$" />
<input type="submit" value="Send it!" />
</form>
L'attribut requiredmessage
est l'attribut personnalisé dont j'ai parlé. Vous pouvez définir votre message pour chaque champ obligatoire car jQuery l'obtiendra lorsqu'il affichera le message d'erreur. Vous n'avez pas besoin de définir chaque champ directement sur JavaScript, jQuery le fait pour vous. Cette expression rationnelle semble être correcte (au moins, elle bloque votre [email protected]
! Haha)
Comme vous pouvez le voir sur le violon, je fais une validation supplémentaire de l'événement de formulaire de soumission (ceci continue sur document.ready aussi):
$("#validation").on("submit", function(e)
{
for (var i = 0; i < e.target.length; i++)
{
if (!e.target[i].validity.valid)
{
window.alert(e.target.attributes.requiredmessage.value);
e.target.focus();
return false;
}
}
});
J'espère que cela fonctionne ou vous aide de toute façon.
Cela fonctionne bien pour moi:
jQuery(document).ready(function($) {
var intputElements = document.getElementsByTagName("INPUT");
for (var i = 0; i < intputElements.length; i++) {
intputElements[i].oninvalid = function (e) {
e.target.setCustomValidity("");
if (!e.target.validity.valid) {
if (e.target.name == "email") {
e.target.setCustomValidity("Please enter a valid email address.");
} else {
e.target.setCustomValidity("Please enter a password.");
}
}
}
}
});
et la forme avec laquelle je l'utilise (tronqué):
<form id="welcome-popup-form" action="authentication" method="POST">
<input type="hidden" name="signup" value="1">
<input type="email" name="email" id="welcome-email" placeholder="Email" required></div>
<input type="password" name="passwd" id="welcome-passwd" placeholder="Password" required>
<input type="submit" id="submitSignup" name="signup" value="SUBMIT" />
</form>
Vous pouvez faire cela en configurant un écouteur d'événements pour le 'non valide' sur toutes les entrées du même type, ou juste une, en fonction de vos besoins, puis en configurant le message approprié.
[].forEach.call( document.querySelectorAll('[type="email"]'), function(emailElement) {
emailElement.addEventListener('invalid', function() {
var message = this.value + 'is not a valid email address';
emailElement.setCustomValidity(message)
}, false);
emailElement.addEventListener('input', function() {
try{emailElement.setCustomValidity('')}catch(e){}
}, false);
});
Le deuxième élément du script, le message de validité sera réinitialisé, car sinon il ne sera pas possible de soumettre le formulaire: par exemple, cela empêchera le message d'être déclenché même lorsque l'adresse e-mail a été corrigée.
De plus, vous n'avez pas besoin de configurer le champ de saisie comme requis, car le 'non valide' sera déclenché une fois que vous aurez commencé à saisir l'entrée.
Voici un violon pour ça: http://jsfiddle.net/napy84/U4pB7/2/ J'espère que ça vous aidera!
Il suffit d’obtenir l’élément et d’utiliser la méthode setCustomValidity.
Exemple
var foo = document.getElementById('foo');
foo.setCustomValidity(' An error occurred');
Utilisez l'attribut "title" dans chaque balise d'entrée et écrivez un message dessus
vous pouvez simplement simplement utiliser l'attribut oninvalid = ", avec le bingding le this.setCustomValidity () eventListener!
Voici mes codes de démo! (Vous pouvez l'exécuter pour vérifier!)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>oninvalid</title>
</head>
<body>
<form action="https://www.google.com.hk/webhp?#safe=strict&q=" method="post" >
<input type="email" placeholder="[email protected]" required="" autocomplete="" autofocus="" oninvalid="this.setCustomValidity(`This is a customlised invalid warning info!`)">
<input type="submit" value="Submit">
</form>
</body>
</html>
http://caniuse.com/#feat=form-validation
https://www.w3.org/TR/html51/sec-forms.html#sec-constraint-validation
Vous pouvez ajouter ce script pour afficher votre propre message.
<script>
input = document.getElementById("topicName");
input.addEventListener('invalid', function (e) {
if(input.validity.valueMissing)
{
e.target.setCustomValidity("Please enter topic name");
}
//To Remove the sticky error message at end write
input.addEventListener('input', function (e) {
e.target.setCustomValidity('');
});
});
</script>
Pour d'autres validations telles que la non-concordance de modèle, vous pouvez ajouter une condition iftier
comme
else if (input.validity.patternMismatch)
{
e.target.setCustomValidity("Your Message");
}
il existe d’autres conditions de validité telles que rangeOverflow, rangeUnderflow, stepMismatch, typeMismatch, valide