11
votes

JQuery DatePicker restreindre les dates dans le champ de deuxième date basée sur une date sélectionnée dans le champ Première date

J'utilise JQuery Date Picker et j'ai le code suivant où lorsque l'utilisateur sélectionne une date, le champ ci-dessous est renseigné avec la date +1

$('#dt2').datepicker({
        dateFormat: "dd-M-yy" 
    });

$("#dt1").datepicker(
    {dateFormat: "dd-M-yy", 
    minDate:  0,
onSelect: function(date){
var date2 = $('#dt1').datepicker('getDate');
            date2.setDate(date2.getDate()+1);
            $('#dt2').datepicker('setDate', date2);


0 commentaires

3 Réponses :


18
votes

Voici comment je le fais -

Démo

et le code est comme suit xxx


1 commentaires

Réponse géniale.



40
votes

J'ai créé un jsfiddle pour vous. Je ne suis pas sûr de 100% si c'est "infaillible", mais pour empêcher les utilisateurs de taper manuellement une date, vous pouvez définir les entrées sur loadonly code> par exemple xxx pré>

à la MOMENT I Vérifiez la DT2 ONCLOSE et si sa date est inférieure à la date de DT1S, je le corrige. De plus, si une date est sélectionnée dans DT1, le Mindate de DT2 est défini sur DT1 DATE + 1. P>

$(document).ready(function () {

    $("#dt1").datepicker({
        dateFormat: "dd-M-yy",
        minDate: 0,
        onSelect: function (date) {
            var date2 = $('#dt1').datepicker('getDate');
            date2.setDate(date2.getDate() + 1);
            $('#dt2').datepicker('setDate', date2);
            //sets minDate to dt1 date + 1
            $('#dt2').datepicker('option', 'minDate', date2);
        }
    });
    $('#dt2').datepicker({
        dateFormat: "dd-M-yy",
        onClose: function () {
            var dt1 = $('#dt1').datepicker('getDate');
            var dt2 = $('#dt2').datepicker('getDate');
            //check to prevent a user from entering a date below date of dt1
            if (dt2 <= dt1) {
                var minDate = $('#dt2').datepicker('option', 'minDate');
                $('#dt2').datepicker('setDate', minDate);
            }
        }
    });
});


4 commentaires

Frais! Toujours heureux d'aider.


+1, c'était exactement ce dont j'avais besoin. Au lieu de votre dernier si dans # dt2 J'ai ajouté l'attribut réadonnement à mon élément d'entrée.


@Sirderpington peut-il être fait avec JavaScript? et la date de type d'entrée?


@Ingusgraholskis Je n'ai pas eu de vrai look mais je suppose que cela peut être, oui. La date de type d'entrée n'est pas encore prise en charge par tous les grands navigateurs. Firefox, par exemple, manque de soutien si je suis correct. Donc, vous voudrez peut-être donner à JQuery un aller avoir une solution fiable



4
votes

Je viens de changer votre code, de sorte que la date de la date de date2 définie automatiquement et si la date1 est supérieure à celle de Date2, il définit Date2 = Date1

  $("#dt1").datepicker({
            dateFormat: "dd/mm/yy",
            onSelect: function (date) {
                var dt1 = $('#dt1').datepicker('getDate');
                var dt2 = $('#dt2').datepicker('getDate');
                if (dt1 > dt2) {
                    $('#dt2').datepicker('setDate', dt1);
                }
                $('#dt2').datepicker('option', 'minDate', dt1);
            }
        });
        $('#dt2').datepicker({
            dateFormat: "dd/mm/yy",
            minDate: $('#dt1').datepicker('getDate'),
            onClose: function () {
                var dt1 = $('#dt1').datepicker('getDate');
                var dt2 = $('#dt2').datepicker('getDate');
                //check to prevent a user from entering a date below date of dt1
                if (dt2 <= dt1) {
                    var minDate = $('#dt2').datepicker('option', 'minDate');
                    $('#dt2').datepicker('setDate', minDate);
                }
            }
        });


1 commentaires

Encore mieux - cela semble être la bonne façon de le faire sans que les utilisateurs agaçants.