1

我有以下代码,但是如果input.formdate找不到,它仍然会运行该getDateFormat函数。这对我来说没有意义。

有谁知道原因?

$(function() {
    $("input.formdate").datepicker({
        changeMonth: true,
        changeYear: true,
        dateFormat: getDateFormat()
    });
});

function getDateFormat()
{
    var format = 'DMY';

    if (document.edit_form && document.edit_form.date_format)
        format = document.edit_form.date_format.value;

    if (format = "DMY")
        return "dd-mm-yy";
    else
        return "mm-dd-yy";
}
4

2 回答 2

6

旧答案:(
基于对问题的误解 - 请参阅评论)
因为您正在调用函数并传递其结果,而不是您应该做的事情:传递对函数的引用(即将其视为变量)。

做这个:

$(function() {
    $("input.formdate").datepicker({
        changeMonth: true,
        changeYear: true,
        dateFormat: getDateFormat
    });
});

更新:
检查 jQuery UI DatePicker API 后,您需要将字符串传递给 dateFormat。
如果您不希望您的函数执行,除非至少有一个输入具有一类 formdate,您需要这样做:

if ( $('input.formdate').length > 0 )
{
    $("input.formdate").datepicker
    (
        { changeMonth: true
        , changeYear: true
        , dateFormat: getDateFormat()
        }
    );
}

或者,如果:

$("input.formdate").datepicker
(
    { changeMonth: true
    , changeYear: true
    , dateFormat:
        $('input.formdate').length > 0 ? getDateFormat() : 'dd-mm-yy'
    }
);

尽管这是否或多或少具有可读性是值得商榷的。


(可能还有比这更短的方法,但我现在必须走了。)

于 2009-03-12T00:12:47.893 回答
5

getDateFormat 函数在 Javascript 被解析后立即运行,因为它在对象文字符号中。

您的表达式被评估为

$(function() {
    $("input.formdate").datepicker({
        changeMonth: true,
        changeYear: true,
        dateFormat: <RESULT_FROM_CALLING_getDateFormat()>
    });
});
于 2009-03-12T00:13:00.403 回答