为什么不将 jQuery UI 日期选择器的默认值设置为匿名函数

Why doesn't setting the default value of a jQuery UI datepicker to an anonymous function work?

本文关键字:设置 函数 默认值 jQuery UI 日期 选择器 为什么不      更新时间:2023-09-26

我真的很好奇为什么这段将 defaultDate 设置为 25 年前的代码从今天开始正常工作......

$('div.recipient_modal input[name="birth_date"]:first').datepicker({
    changeMonth: true,
    changeYear: true,
    defaultDate: get_recipient_default_birth_date(),
    yearRange: 'c-125:' + new Date().getFullYear()
});
function get_recipient_default_birth_date()
{
    var d = new Date();
    var y = d.getFullYear() - 25;
    d.setFullYear(y);
    return $.datepicker.formatDate('mm/dd/yy', d);
}

但是当我尝试使用匿名函数将默认日期设置为 25 年前的今天而不是调用具有相同代码的命名函数时,如下所示......

    $('div.recipient_modal input[name="birth_date"]:first').datepicker({
    changeMonth: true,
    changeYear: true,
    defaultDate: function() {
        var d = new Date();
        var y = d.getFullYear() - 25;
        d.setFullYear(y);
        return $.datepicker.formatDate('mm/dd/yy', d);
    },
    yearRange: 'c-125:' + new Date().getFullYear(),
});

我在控制台中收到以下错误...

Uncaught TypeError: Object function () {
        var d = new Date();
        var y = d.getFullYear() - 25;
        d.setFullYear(y);
        return $.datepicker.formatDate('mm/dd/yy', d);
    } has no method 'getTime'

谁能解释这两个赋值的区别,以及为什么匿名函数不起作用,而命名函数却起作用?

谢谢。

不同之处在于,在第一个示例中,您实际上是在调用函数,因此datepicker获取函数返回的日期值,而不是函数本身:

get_recipient_default_birth_date()

在第二个中,您将传递一个函数对象。 该选项不支持函数。

您已经描述了它不起作用的原因:您将匿名函数设置为值。

不是匿名函数的返回值。

在第一个工作示例中,您正在调用返回默认值值的函数。在第二个示例中,您只需定义一个匿名函数并将其直接赋值 - 而无需调用它。

如果你想使用这样的匿名函数,你需要实际调用它,如下所示:

defaultValue: (function() { /* stuff */; return something; })()