J'ai une simple page avec un formulaire et un bouton en dehors du formulaire. J'essaie de valider le formulaire en cliquant sur le bouton .. J'ai ajouté les règles de validation du formulaire sur la fonction document.onready Cependant, le formulaire n'est pas validé.
HTML: -
<html>
<head>
<script src="lib/jquery1.5.2.js"></script>
<script src="lib/jquery.validate.js"></script>
<script src="lib/myjs.js"></script>
</head>
<body>
<form id="form1" name="form1">
Field 1: <input id="field1" type="text" class="required">
</form>
<div>
<input id="btn" type="button" value="Validate">
</div>
</body>
</html>
JS: -
$(document).ready(function(){
$("#form1").validate({
rules: {
field1: "required"
},
messages: {
field1: "Please specify your name"
}
})
$('#btn').click(function() {
$("#form1").validate(); // This is not working and is not validating the form
});
});
Une idée de ce qui ne va pas?
Dans votre gestionnaire click
, l'erreur est la méthode .validate()
; il initialise uniquement le plugin, il ne valide pas la form
.
Pour éliminer le besoin d'avoir un bouton submit
dans la form
, utilisez .valid()
pour déclencher une vérification de validation ...
$('#btn').on('click', function() {
$("#form1").valid();
});
.validate()
- pour initialiser le plugin (avec options) une fois sur DOM ready.
.valid()
- pour vérifier l'état de validation (valeur booléenne) ou pour déclencher un test de validation sur la form
à tout moment.
Sinon, si vous aviez un bouton type="submit"
dans le conteneur form
, vous n’auriez pas besoin d’un gestionnaire click
spécial ni de la méthode .valid()
, car le plug-in le capturerait automatiquement.
MODIFIER:
Vous avez également deux problèmes dans votre code HTML ...
<input id="field1" type="text" class="required">
Vous n'avez pas besoin de class="required"
pour déclarer des règles dans .validate()
. C'est redondant et superflu.
L'attribut name
est manquant. Les règles sont déclarées dans .validate()
par leur name
. Le plugin dépend d'attributs name
uniques pour garder une trace des entrées.
Devrait être...
<input name="field1" id="field1" type="text" />
$(document).ready(function() {
$("#form1").validate({
rules: {
field1: "required"
},
messages: {
field1: "Please specify your name"
}
})
});
<form id="form1" name="form1">
Field 1: <input id="field1" type="text" class="required">
<input id="btn" type="submit" value="Validate">
</form>
Vous utilisez également type = "bouton". Et je ne sais pas pourquoi vous devez séparer le bouton de soumission, le placer dans le formulaire C'est plus approprié de le faire de cette façon. Cela devrait marcher.
Vous pouvez également obtenir un autre moyen en utilisant la balise button
Selon nouvel attribut html5, vous pouvez également ajouter un attribut de formulaire tel que
<form id="formId">
<input type="text" name="fname">
</form>
<button id="myButton" form='#formId'>My Awesome Button</button>
Donc, le bouton sera attaché au formulaire.
Cela devrait fonctionner avec le plugin validate () de jQuery comme:
var validator = $( "#formId" ).validate();
validator.element( "#myButton" );
Cela fonctionne aussi avec la balise input