Votre question est quelque chose que j'ai essayé de comprendre depuis un moment aussi. C'est ce que j'ai jusqu'ici. Je l'utilise pour valider une plage de dates unique. Il faut des champs d'entrée comme params plutôt que les dates:
jQuery.validator.addMethod("rangeDate", function(value, element, params) {
try {
var beforedate=$.datepicker.parseDate($(params[0]).datepicker('option','dateFormat'),$(params[0]).val());
var afterdate=$.datepicker.parseDate($(params[1]).datepicker('option','dateFormat'),$(params[1]).val());
var qdate=$.datepicker.parseDate($(element).datepicker('option','dateFormat'),value);
return this.optional(element) || (qdate >= beforedate && qdate<=afterdate);
} catch(err){
return false;
}
}, function(params){
return "Date must occur between " + $(params[0]).val() + ' and ' + $(params[1]).val();
}
);
et la règle ressemble à ceci:
rules:{
between_date: { dateCan: true,
rangeDate: {
depends: function(element) { //check that params exist
return $("input[name='before_date']").valid()
&& $("input[name='after_date']").valid();
},
param: ["input[name='before_date']", "input[name='after_date']"]
}
}
}
Après avoir expérimenté un peu, je l'ai vu qu'il est possible d'avoir plus d'une règle rangeDate
pour un champ. Toutefois, le dernier appel semble écraser les résultats de tous les appels rangeDate
précédents pour ce champ. Donc, je pense ce qui pourrait fonctionner est d'ajouter une autre règle personnalisée qui accepte un tableau de paires de champs qui peuvent être alimentés à rangeDate
. Le problème avec cette approche est que la clause depends
pour la règle rangeDate
devient difficile car vous obtenez plus de paires de dates. Cela est particulièrement vrai si vous n'avez besoin que d'au moins une paire pour être présente plutôt que pour toutes les paires.
Bien sûr, si les plages de dates ne sont pas dynamiques, le problème est plus facile car aucune clause depends
n'est nécessaire. Il suffit de réécrire rangeDate
pour accepter les dates plutôt que les champs et écrire une règle d'encapsulation pour accepter un tableau de paires de dates.
Si vous avez trouvé une solution au problème, j'aimerais le voir. J'espère que ce sera plus élégant que le mien.
Avez-vous compris? – Silkster
Peur, je n'ai pas eu le temps d'y jeter un œil depuis que j'ai posté la question. Mais c'est absolument quelque chose que je dois comprendre bientôt. – amunds
sont ces valeurs codées en dur dans le formulaire ou en changeant? Si oui, je peux avoir une solution. –