我有一个Datepicker与以下代码。我有一个dropdownBox,并在dropDown框中更改我想启动datePicker beforeShowDay函数。我该怎么做?
var freeDate;
我的代码部分如下:
$("#myDiv").datepicker({ showOtherMonths: true,selectOtherMonths: true,dateFormat: "yy/mm/dd",onSelect: function(dateText,inst) {},onChangeMonthYear: function(year,month,inst) { $.ajax({ contentType: "application/json; charset=utf-8",dataType: "json",url: '@Url.Action("ListDates","Party")',data: { date: new Date(year,month - 1,1).toString("yyyy/MM/dd"),userID: userID },success: function(data) { freeDate = eval(data); },error: function(request,status,error) {} }); },beforeShowDay: function(dateToShow) { var returnResult = new Array(); returnResult.push(true); var itemMatched = false; $.each(freeDate,function(key,value) { if (new Date(parseInt(value.substr(6))).compareTo(dateToShow) == 0) { itemMatched = true; returnResult.push('timeNotFree'); return; } }); if (!itemMatched) returnResult.push(''); returnResult.push(''); return returnResult; } });
$('#myList').change(function() { userID = $("#userList > option:selected").attr("value"); // myList is used to have freeDate and the DatePicker must be shown accordingly. $.ajax({ contentType: "application/json; charset=utf-8",data: { date: new Date($("#myDiv").datepicker("getDate").toString("yyyy/MM/dd")),userID: userID },success: function(data) { freeDate = eval(data); },error) {} }); $("#myDiv").datepicker("setDate",$("#myDiv").datepicker("getDate").toString("yyyy/MM/dd")); });
解决方法
beforeShowDay是在一天呈现之前由datepicker触发的事件。您可以使用它来自定义如何显示包含该日期的单元格,例如您可以将其变为红色以指示阻止的日期。
从我从你的问题中可以看出,您可以调用datapicker.refresh()
方法来指示freeDate变量已经更改(例如通过AJAX响应),并且需要再次渲染日历。
编辑
我相信这是你的下拉列表的代码,好像它使用ajax:
$('#myList').change( ...
在成功回调中,你有:
freeDate = eval(data);
这是freeDate更改的地方,这可能是您应该调用.refresh()方法的地方。请注意,默认情况下,AJAX是异步的,所以选择值和成功事件回调之间有一些延迟。
. . . freeDate = eval(data); $("#myDiv").datepicker("refresh"); . . .