lea*_*ing 16 ajax jquery jquery-ui date jquery-ui-datepicker
我有一个带有以下代码的Datepicker.我有一个下拉框,在dropDown框中发生更改后,我想启动datePicker beforeShowDay函数.我怎样才能做到这一点?
var freeDate;
Run Code Online (Sandbox Code Playgroud)
我的部分代码如下:
$("#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;
}
});?
Run Code Online (Sandbox Code Playgroud)
$('#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"));
});?
Run Code Online (Sandbox Code Playgroud)
beforeShowDay是由一个日期选择器之前触发的事件当天被渲染.您可以使用它来自定义包含日期的单元格的显示方式,例如,您可以将其变为红色以指示阻止日期.
根据我对你的问题的理解,你可以调用datapicker.refresh()方法来指示freeDate变量已经改变(例如通过AJAX响应),并且需要再次渲染日历.
我相信这是你的下拉列表的代码,似乎它使用ajax:
$('#myList').change(
...
Run Code Online (Sandbox Code Playgroud)
在成功回调中,您有:
freeDate = eval(data);
Run Code Online (Sandbox Code Playgroud)
这是freeDate更改的地方,这可能是您应该调用.refresh()方法的地方.请注意,默认情况下AJAX是异步的,因此在选择值和成功事件回调之间存在一些延迟.
以下是在现有的datepicker上调用方法的方法:
.
.
.
freeDate = eval(data);
$("#myDiv").datepicker("refresh");
.
.
.
Run Code Online (Sandbox Code Playgroud)
我想说你应该在日期选择器调用之外定义该函数,然后你的更改和日期选择器可以调用该函数。
编辑:添加了澄清。
试图弄清楚插件如何工作来调用该函数可能比其价值更多的工作。您可以单独定义该函数,然后将其传递给插件。然后您的下拉更改事件可以调用该独立方法。
像这样的东西:
function doMyThing(dateToShow){
// do stuff
}
$("#myDiv").datepicker({
...
beforeShowDay: function(dateToShow){
doMyThing(dateToShow);
}
});
$('#myList').change(function () {
doMyThing(dateToShow);
});
Run Code Online (Sandbox Code Playgroud)
我唯一不确定的是您想要在 onchange 中作为参数传递什么。由于这不是单击日期的操作,因此我不知道“dateToShow”应该是什么。