Comment vérifier/valider en jQuery si la date de fin [zone de texte] est supérieure à la date de début [zone de texte] ?
Comment l'utiliser avec deux zones de texte ?
Comment vérifier/valider en jQuery si la date de fin [zone de texte] est supérieure à la date de début [zone de texte] ?
Je développe juste la réponse de Fusion. Cette méthode d'extension fonctionne en utilisant le plugin jQuery validate. Il validera les dates et les nombres
jQuery.validator.addMethod("greaterThan",
function(value, element, params) {
if (!/Invalid|NaN/.test(new Date(value))) {
return new Date(value) > new Date($(params).val());
}
return isNaN(value) && isNaN($(params).val())
|| (Number(value) > Number($(params).val()));
},'Must be greater than {0}.');
Pour l'utiliser :
$("#EndDate").rules('add', { greaterThan: "#StartDate" });
o
$("form").validate({
rules: {
EndDate: { greaterThan: "#StartDate" }
}
});
J'ai dû le modifier légèrement pour permettre des dates de fin vierges dans mon application, mais cela a fait l'essentiel. code
if (value == 0) { return true ; } else if (!/Invalid|NaN/... code
Avertissement de BUG : Je réalise que la question porte sur les dates, mais ce code ne fonctionnera pas pour les chiffres comme annoncé. J'ai ajouté une réponse en expliquant le pourquoi et le comment, ce qui inclut également la réparation.
Référence jquery.validate.js et jquery-1.2.6.js. Ajoutez une classe startDate à votre zone de texte de date de début. Ajoutez une classe endDate à votre zone de texte de date de fin.
Ajoutez ce bloc script à votre page:-.
<script type="text/javascript">
$(document).ready(function() {
$.validator.addMethod("endDate", function(value, element) {
var startDate = $('.startDate').val();
return Date.parse(startDate) <= Date.parse(value) || value == "";
}, "* End date must be after start date");
$('#formId').validate();
});
</script>
J'espère que cela vous aidera :-)
J'étais juste en train de bricoler La réponse de danteuno et j'ai constaté que, bien que partant d'une bonne intention, il ne fonctionne malheureusement pas sur plusieurs navigateurs qui sont no IE. En effet, IE sera assez strict quant à ce qu'il accepte comme argument de la fonction Date
mais d'autres ne le feront pas. Par exemple, Chrome 18 donne
> new Date("66")
Sat Jan 01 1966 00:00:00 GMT+0200 (GTB Standard Time)
Le code prend alors le chemin de la "comparaison des dates" et tout se dégrade à partir de là (ex. new Date("11")
est supérieure à new Date("66")
et c'est évidemment le contraire de l'effet recherché).
Par conséquent, après réflexion, j'ai modifié le code pour donner la priorité au chemin "numbers" sur le chemin "dates" et valider que l'entrée est bien numérique avec l'excellente méthode fournie dans Valider les nombres décimaux en JavaScript - IsNumeric() .
Au final, le code devient :
$.validator.addMethod(
"greaterThan",
function(value, element, params) {
var target = $(params).val();
var isValueNumeric = !isNaN(parseFloat(value)) && isFinite(value);
var isTargetNumeric = !isNaN(parseFloat(target)) && isFinite(target);
if (isValueNumeric && isTargetNumeric) {
return Number(value) > Number(target);
}
if (!/Invalid|NaN/.test(new Date(value))) {
return new Date(value) > new Date(target);
}
return false;
},
'Must be greater than {0}.');
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
0 votes
Il existe une solution : stackoverflow.com/questions/17169772/