Jquery 如何从另一个函数启动beforeShowDay的日期选择器

Jquery 如何从另一个函数启动beforeShowDay的日期选择器,jquery,ajax,jquery-ui,date,jquery-ui-datepicker,Jquery,Ajax,Jquery Ui,Date,Jquery Ui Datepicker,我有一个日期选择器,代码如下。我有一个下拉框,在下拉框中进行更改后,我想启动datePicker beforeShowDay功能。我该怎么做 var freeDate; 我的部分代码如下: $("#myDiv").datepicker({ showOtherMonths: true, selectOtherMonths: true, dateFormat: "yy/mm/dd", onSelect: function(dateText, inst) {},

我有一个日期选择器,代码如下。我有一个下拉框,在下拉框中进行更改后,我想启动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;
    }
});​


我想说,您可能应该在datepicker调用之外定义该函数,然后您的更改和datepicker可以调用该函数

编辑:添加了澄清

试图弄清楚插件如何工作来调用函数可能比它的价值要大得多。您可以单独定义函数,然后将其传递给插件。然后,您的下拉更改事件可以调用该独立方法

大概是这样的:

function doMyThing(dateToShow){
   // do stuff
}

$("#myDiv").datepicker({
    ...
    beforeShowDay: function(dateToShow){
        doMyThing(dateToShow);
    }
});  

$('#myList').change(function () {
    doMyThing(dateToShow);
});  

我唯一不确定的是,您希望在onchange中作为参数传递什么。由于这不是单击日期的操作,我不知道“dateToShow”应该是什么。

beforeShowDay
是日期选择器在呈现日期之前触发的事件。您可以使用它自定义包含日期的单元格的显示方式,例如,您可以将其变为红色以指示阻止的日期

根据我对您的问题的理解,您可以调用该方法来指示
freeDate
变量已更改(例如通过AJAX响应),并且需要再次呈现日历

编辑 我相信这是您下拉列表的代码,它似乎使用了ajax:

$('#myList').change(
...
在成功回调中,您有:

freeDate = eval(data);
这是
freeDate
更改的地方,您可能应该在这里调用
.refresh()
方法。请注意,默认情况下AJAX是异步的,因此在选择值和成功事件回调之间存在一些延迟

下面是如何在现有日期选择器上调用方法:

.
.
.
freeDate = eval(data);
$("#myDiv").datepicker("refresh");
.
.
.

如何从下拉列表中调用beforeShowDay:函数(dateToShow)?即使我正在调用doMyThing(dateToShow);在我的列表更改时,它不会调用日期选择器的OnChange函数!我需要从myListChange事件调用DatePicker的OnChange事件,如果您解释一下您实际使用的表单,我会更好地理解。我相信“beforeShowDay”会在日历显示之前被调用,而不是一次更改。好的,让我解释一下。日期选择器显示在局部视图中,与日期选择器关联的所有函数都显示在局部视图中。加载页面时,将调用DatePicker函数。但当我点击下拉菜单时,尽管有setDate函数,但似乎没有调用任何函数。但我的意思是,你要找的实际功能是什么。这个下拉列表是什么?选择下拉列表后,datepicker会发生什么情况,它是否会根据所选内容填充一些日期?您能否提供这些事件中发生的情况(在ShowDay等之前)?我应该在哪里使用datepicker.refresh,我可以举一个例子吗?如果下拉列表中的值发生变化,datepicker不会重新调整上述代码是否正确?
onSelect
函数的右括号被注释掉。另外,您正在向提供数据,但没有将类型指定为
POST
,因此jQuery总是执行
GET
请求。据我在回答注释中了解,您有一个
,日期为
元素。选择日期需要显示datepicker小部件,其中月份已经设置。了解您是否为
和日期选择器
提供了HTML,并给出了1或2个示例,说明您希望日期选择器在
中显示给定日期的日期,这将有助于理解。
.
.
.
freeDate = eval(data);
$("#myDiv").datepicker("refresh");
.
.
.