Jquery valider plage de dates échoue
J'ai une page HTML avec un formulaire web. Entre autres choses, il comprend les champs de formulaire:
- Titre de zone de texte
- SourceName - zone de texte
- Url - zone de texte
- FullText - zone de texte
- PublicationDate - zone de texte à l'aide de jQuery UI datepicker
- Date de début de zone de texte à l'aide de jQuery UI datepicker
- EndDate - zone de texte à l'aide de jQuery UI datepicker
Je suis en train de mettre en œuvre le jQuery validateur plusieurs exemple:
jQuery(document).ready(function() {
//a custom method for validating the date range
jQuery.validator.addMethod("dateRange", function() {
var date1 = new Date(jQuery("#StartDate").val());
var date2 = new Date(jQuery("#EndDate").val());
return (date1 < date2);
}, "Please check your dates. The start date must be before the end date.");
//a new class rule to group all three methods
jQuery.validator.addClassRules({
requiredDateRange: { required: true, date: true, dateRange: true }
});
//overwrite default messages
jQuery.extend(jQuery.validator.messages, {
required: "These fields are required",
date: "Please specify valid dates"
});
jQuery("#mainForm").validate({
submitHandler: function() {
alert("Valid date range.")
},
groups: {
dateRange: "StartDate EndDate"
},
rules: {
"Title": "required",
"SourceName": "required",
"Url": "required",
"FullText": "required",
"PublicationDate": "required",
"CategoryCount": {required: true, min: 1}
},
messages: {
"Title": "Please type in a headline.",
"SourceName": "Please select a source by typing a few letters and selecting from the choices that pop up.",
"Url": "Please paste or type in a web page link.",
"FullText": "Please paste in the full text of the source report.",
"PublicationDate": "Please provide a date of publication.",
"CategoryCount": "Please specify at least one category."
}
});
//Capture changes to the list of selected categories by
//storing the count in a hidden field.
jQuery(".categoryCheckbox").click(function() {
var count = new Number(jQuery("#CategoryCount").val());
if (jQuery(this).attr("checked") == true) {
count = count + 1;
} else {
count = count - 1;
}
if (count < 0) {
count = 0
};
jQuery("#CategoryCount").val(count);
});
});
Il valide tous mais la date de la gamme. J'ai essayé de faire un peu plus personnalisé, mais explicitement la création de la Date d'objets avant de l'instruction de retour (dans la démo, c'est sur une seule ligne), mais ce n'est pas bon. Quelqu'un a une expérience dans la fabrication de ce fait le travail?
EDIT:
J'ai ajouté une ligne pour afficher un message d'alerte lorsque le dateRange méthode est appelée, mais elle ne se présente jamais. Je me demande si les groupes et les règles des parties du programme de validation ne fonctionne tout simplement pas ensemble.
Vous devez vous connecter pour publier un commentaire.
Avez-vous vérifié que les valeurs de date1 et date2 sont en fait de se définir? Êtes-vous en faveur
pour créer le datepickers?
Comment sur le code html? L'exemple que vous pointez sur eu l'id et le nom des cases de l'ensemble (je ne sais pas si le validateur utilise l'id ou le nom, mais il pourrait être soit à partir de l'échantillon).
Cela fonctionne pour moi, pour s'assurer que le choix de la date n'est pas avant la date en cours:
et:
Après avoir essayé plusieurs sauvages des variations basées sur la documentation, j'ai trouvé que cette méthode ne fonctionne tout simplement pas la façon dont il est représenté dans l'échantillon. Voici ce que j'ai trouvé que j'avais à faire.
J'ai ajouté une règle pour la date de fin de champ et l'avait appeler la fonction dateRange. Alors seulement la dateRange fonction feu.
Le script obtenu est beaucoup plus clair, je pense, me faire soupçonner l'exemple que j'ai vu était obsolète.