我强调一个月内的某些日子,具体取决于来自后端的数据。当我改变月份或年份时,我再次呼叫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;
}
答案 0 :(得分:3)
我在这里知道了这个问题。 我们需要为ajax调用设置async:false
$.ajax({async:false});
现在工作正常。
答案 1 :(得分: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
},
[...]
});
});
答案 2 :(得分:0)
陷入同一问题,由于外部修改(如“ setDate”),日期选择器未刷新。我的解决方案是伪造一个mouseleave-event
$('.hasDatepicker').find('.ui-datepicker-calendar').trigger('mouseleave')