Jquery Datepicker在setDate上抛出错误

时间:2017-04-21 20:08:50

标签: javascript jquery datepicker

当我尝试使用jquery datepicker的setDate方法时,我遇到并发出了以下错误:

  

未捕获RangeError:超出最大调用堆栈大小

代码如下,错误发生在代码的最后一行。 我可以使用日期对象尝试使用多个不同日期的setDate,无论我做什么,我都会收到错误。

$('.revEndDateInput').datepicker({
        format: "dd/mm/yyyy",
        startView: "days", 
        minViewMode: "days",
        language: 'pt-BR',
        orientation: 'bottom right',
});

$(".revEndDateInput").datepicker().on('changeDate', function(){
    var ThisID = $(this).attr('id').split('-')[1];

    var StartDate = $('#revStartDateInput-'+ThisID).datepicker('getDate');
    var EndDate = $(this).datepicker('getDate');
    if (EndDate <= StartDate) {
        var ChosenDate = $.format.date(StartDate, 'dd/MM/yyyy');
        var HiddenDate = $.format.date(StartDate, 'yyyy-MM-dd');
    }

    else{
        var ChosenDate = $.format.date(EndDate, 'dd/MM/yyyy');
        var HiddenDate = $.format.date(EndDate, 'yyyy-MM-dd');  
    }


    $('#revEndDateInput-'+ThisID).attr('value',ChosenDate);
    $('#revEndDate-'+ThisID).attr('value',HiddenDate);

    $(this).datepicker('hide');

    $(this).datepicker( "setDate", "10/12/2012" );
});

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

通过这个微小的改变,它不会在修复日期后多次循环:

//End date picker
$('.revEndDateInput').datepicker({
        format: "dd/mm/yyyy",
        startView: "days", 
        minViewMode: "days",
        language: 'pt-BR',
        orientation: 'bottom right',
        autoclose: 'true'

});

$(".revEndDateInput").datepicker().on('hide', function(){
    var ThisID = $(this).attr('id').split('-')[1];
    var StartDate = $('#revStartDateInput-'+ThisID).datepicker('getDate');
    var EndDate = $(this).datepicker('getDate');
    console.log('asd');
    if (EndDate < StartDate) {
        $(this).datepicker( "setDate", StartDate);
        var ChosenDate = $.format.date(StartDate, 'dd/MM/yyyy');
        var HiddenDate = $.format.date(StartDate, 'yyyy-MM-dd');
    }

    else{
        var ChosenDate = $.format.date(EndDate, 'dd/MM/yyyy');
        var HiddenDate = $.format.date(EndDate, 'yyyy-MM-dd');  
    }


    $('#revEndDateInput-'+ThisID).attr('value',ChosenDate);
    $('#revEndDate-'+ThisID).attr('value',HiddenDate);

    $(this).datepicker('hide');


}); //changeDate

感谢大家的帮助。

答案 1 :(得分:0)

@Roko说的是什么,你正在打循环,把你的代码放在onSelect函数中,就像这样

$('.revEndDateInput').datepicker({
        format: "dd/mm/yyyy",
        startView: "days", 
        minViewMode: "days",
        language: 'pt-BR',
        orientation: 'bottom right',
        onSelect: function(selectedDate) {
            var ThisID = $(this).attr('id').split('-')[1];

            var StartDate = $('#revStartDateInput-'+ThisID).datepicker('getDate');
            var EndDate = $(this).datepicker('getDate');
            if (EndDate <= StartDate) {
                var ChosenDate = $.format.date(StartDate, 'dd/MM/yyyy');
                var HiddenDate = $.format.date(StartDate, 'yyyy-MM-dd');
            }

            else{
                var ChosenDate = $.format.date(EndDate, 'dd/MM/yyyy');
                var HiddenDate = $.format.date(EndDate, 'yyyy-MM-dd');  
            }


            $('#revEndDateInput-'+ThisID).attr('value',ChosenDate);
            $('#revEndDate-'+ThisID).attr('value',HiddenDate);

            $(this).datepicker('hide');

            $(this).datepicker( "setDate", "10/12/2012" )
        }
});

看看是否修复它

P.S。我只在onSelect回调中粘贴了您的代码,您必须将其与您的需求相匹配