为什么在没有找到元素时运行该函数?

时间:2009-03-12 00:08:58

标签: javascript jquery function jquery-ui jquery-ui-datepicker

我有以下代码,但是如果找不到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";
}

2 个答案:

答案 0 :(得分: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()
        }
    );
}

或者,您可以使用内联if:

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

虽然这或多或少可读,但值得商榷。


(可能还有更短的路,但我现在必须走。)

答案 1 :(得分:5)

getDateFormat函数在解析Javascript后立即运行,因为它在对象文字表示法中。

您的表达式评估为

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