我有一个包含以下代码的Datepicker。我有一个下拉框,当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",
dataType: "json",
url: '@Url.Action("ListDates", "Party")',
data: {
date: new Date($("#myDiv").datepicker("getDate").toString("yyyy/MM/dd")),
userID: userID
},
success: function(data) {
freeDate = eval(data);
},
error: function(request, status, error) {}
});
$("#myDiv").datepicker("setDate", $("#myDiv").datepicker("getDate").toString("yyyy/MM/dd"));
});
发布于 2011-05-05 16:02:29
beforeShowDay
是在呈现一天之前由datepicker触发的事件。您可以使用它来自定义包含日期的单元格的显示方式,例如,您可以将其变为红色以指示阻止的日期。
根据我对您的问题的理解,您可以调用datapicker.refresh()
方法来指示freeDate
变量已经更改(例如,通过AJAX响应),并且需要再次呈现日历。
编辑
我相信这是你的下拉菜单的代码,看起来它使用了ajax:
$('#myList').change(
...
在success回调中,您有:
freeDate = eval(data);
这就是freeDate
发生变化的地方,也可能是您应该调用.refresh()
方法的地方。请注意,默认情况下,AJAX是异步的,因此在选择value和成功事件回调之间存在一些延迟。
下面是如何在现有的datepicker上调用方法:
.
.
.
freeDate = eval(data);
$("#myDiv").datepicker("refresh");
.
.
.
发布于 2011-04-30 05:54:27
我会说你应该在datepicker调用之外定义这个函数,然后你的修改和datepicker就可以调用那个函数了。
编辑:添加澄清。
试图弄清楚插件是如何工作来调用函数的,这可能比它的价值更多的工作。您可以单独定义函数,然后将其传递给插件。然后你的dropdown change事件就可以调用这个独立的方法了。
如下所示:
function doMyThing(dateToShow){
// do stuff
}
$("#myDiv").datepicker({
...
beforeShowDay: function(dateToShow){
doMyThing(dateToShow);
}
});
$('#myList').change(function () {
doMyThing(dateToShow);
});
我唯一不确定的是您想要在onchange中传递什么参数。因为它不是点击日期的动作,我不知道"dateToShow“应该是什么。
https://stackoverflow.com/questions/5831230
复制相似问题