开发者问题收集

jQuery DatePicker在setDate上丢弃错误

2017-04-21
641

我遇到了一个问题,当我尝试使用 jquery datepicker 的 setDate 方法时,出现以下错误:

Uncaught RangeError: Maximum call stack size exceeded

代码如下,错误发生在代码的最后一行。 我可以尝试使用日期对象对多个不同的日期进行 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个回答

通过这一小改动,日期固定后循环次数不会超过一秒:

//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

感谢大家的帮助。

Ricardo Melo
2017-04-21

正如@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" )
        }
});

看看是否能修复它

附言:我只将您的代码粘贴在 onSelect 回调中,您必须根据自己的需求进行匹配

Kresimir Pendic
2017-04-21