首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从另一个函数启动DatePicker的beforeShowDay

如何从另一个函数启动DatePicker的beforeShowDay
EN

Stack Overflow用户
提问于 2011-04-29 19:08:15
回答 2查看 11.5K关注 0票数 16

我有一个包含以下代码的Datepicker。我有一个下拉框,当dropDown框发生变化时,我想启动datePicker beforeShowDay函数。我该怎么做呢?

代码语言:javascript
复制
var freeDate;

我的部分代码如下:

代码语言:javascript
复制
$("#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;
    }
});​

代码语言:javascript
复制
$('#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"));
});​
EN

回答 2

Stack Overflow用户

发布于 2011-05-05 16:02:29

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

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

编辑

我相信这是你的下拉菜单的代码,看起来它使用了ajax:

代码语言:javascript
复制
$('#myList').change(
...

在success回调中,您有:

代码语言:javascript
复制
freeDate = eval(data);

这就是freeDate发生变化的地方,也可能是您应该调用.refresh()方法的地方。请注意,默认情况下,AJAX是异步的,因此在选择value和成功事件回调之间存在一些延迟。

下面是如何在现有的datepicker上调用方法:

代码语言:javascript
复制
.
.
.
freeDate = eval(data);
$("#myDiv").datepicker("refresh");
.
.
.
票数 8
EN

Stack Overflow用户

发布于 2011-04-30 05:54:27

我会说你应该在datepicker调用之外定义这个函数,然后你的修改和datepicker就可以调用那个函数了。

编辑:添加澄清。

试图弄清楚插件是如何工作来调用函数的,这可能比它的价值更多的工作。您可以单独定义函数,然后将其传递给插件。然后你的dropdown change事件就可以调用这个独立的方法了。

如下所示:

代码语言:javascript
复制
function doMyThing(dateToShow){
   // do stuff
}

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

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

我唯一不确定的是您想要在onchange中传递什么参数。因为它不是点击日期的动作,我不知道"dateToShow“应该是什么。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5831230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档