【问题标题】:Why does the function run when there are no elements found?为什么没有找到元素时函数会运行?
【发布时间】:2009-03-12 00:08:58
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    这样做:

    $(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'
        }
    );
    

    虽然它是否或多或少可读性值得商榷。


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

    【讨论】:

    • +1 正确答案,虽然我认为“传递对函数本身的引用”会更清楚“传递函数的值”
    • 同意,这个措辞不是很好;我已经更新并采纳了您的建议。 :)
    • 传递对函数的引用不起作用。当我选择一个日期时,它只返回空字符串。嗯????
    • 嗯,这不是你问的 - 你问为什么它被称为是否找到元素。查看实际的 API 文档,似乎 dateFormat 是一个字符串参数而不是一个函数,所以我必须更新我的答案......
    • 是的,我是这么认为的。感谢彼得的回复。帮助我更好地理解它。干杯。
    【解决方案2】:

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

    你的表达式被评估为

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-11
      • 1970-01-01
      • 1970-01-01
      • 2014-07-03
      • 1970-01-01
      • 2020-07-22
      • 1970-01-01
      相关资源
      最近更新 更多