4

我根据来自后端的数据突出显示一个月中的某些日子。当我更改月份或年份时,再次调用 ajax 调用。但 datepicker 只显示以前的日期。我的代码如下,

$("input.dC").live('click',function() {
$(this).datepicker({
showOn:'focus',
changeMonth:'true',
changeYear:'true',
onChangeMonthYear:function(year,month,inst) {
                    var date = new Date(year,month-1);
                    obj.suggestDates(date);
                    $("#"+inst.id).datepicker("refresh");
},
beforeShowDay:function(date){
                for(i=0;i<obj.r.length;i++) {
                  var m = obj.r[i];
                  if(date.getMonth() == m[1] && date.getDate() == m[0] && date.getFullYear() == m[2]) { return[true,"ui-state-highlight"];}
                }
                return[false,""];
}
}).focus();
});


obj.prototype.suggestDates=function(d){
//ajax call here 
//obj.r=response;
}
4

3 回答 3

3

我在这里知道了问题所在。我们需要为 ajax 调用设置 async:false

$.ajax({async:false});

它现在工作正常。

于 2012-12-11T11:35:57.687 回答
0

也许这个链接很有用:https ://github.com/jtsage/jquery-mobile-datebox/issues/231

如果没有,您是否尝试在事件处理程序之外创建一个刷新方法而不是在内部调用它?

像这样的东西:

// I everytime build first a getter für my jQuery-Element. So you can change your selector with changing only one method
var getDatebox = function() {
    return jQuery('input.dC');
};
var refreshDatebox = function() {
    getDatebox().datebox('refresh');
};

getDatebox().on('click', function() { // don't use 'live', it's deprecated
    jQuery(this).datepicker({
        [...]
        onChangeMonthYear: function(year, month) {
            var date = new Date(year, month-1);
            obj.suggestDates(date);
            refreshDatebox(); // call new function
        },
        [...]
    });
});
于 2012-12-13T10:21:54.603 回答
0

陷入同样的​​问题,由于像“setDate”这样的外部修改,日期选择器没有刷新。我的 hacky 解决方案是伪造 mouseleave 事件

$('.hasDatepicker').find('.ui-datepicker-calendar').trigger('mouseleave')
于 2019-02-05T10:11:22.397 回答