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

标签 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";
}

最佳答案

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

这样做:

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

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


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

关于javascript - 为什么函数在没有找到元素时运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/636867/

相关文章:

javascript - 比较对象中的元素

javascript - React 如何使用 typescript 处理复选框的选中和未选中事件

javascript - 如何在 JavaScript 中使用正则表达式验证文件扩展名

c - 调用泛型函数时如何有效处理参数

Javascript - 修改 json 以满足我的需要

javascript - 使用日期选择器关注下一个表单元素

javascript - jQuery:劫持一个链接并找到它的父级

javascript - 每个函数都应该是一个闭包吗?

c - 结构类型/函数调用

javascript - 使用下划线 groupby 按颜色对一系列汽车进行分组