Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么函数在没有找到元素的情况下运行?_Javascript_Jquery_Function_Jquery Ui_Jquery Ui Datepicker - Fatal编程技术网

Javascript 为什么函数在没有找到元素的情况下运行?

Javascript 为什么函数在没有找到元素的情况下运行?,javascript,jquery,function,jquery-ui,jquery-ui-datepicker,Javascript,Jquery,Function,Jquery Ui,Jquery Ui Datepicker,我有以下代码,但是如果找不到input.formdate,它仍将运行getDateFormat函数。这对我来说毫无意义 有人知道原因吗 $(function() { $("input.formdate").datepicker({ changeMonth: true, changeYear: true, dateFormat: getDateFormat() }); }); function getDateFormat() {

我有以下代码,但是如果找不到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
    });
});
更新: 检查jQueryUIDatePickerAPI后,需要将字符串传递给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'
    }
);
虽然这是有争议的,如果更多或更少的可读性

可能还有一条路要走,但我现在得走了。

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

这样做:

$(function() {
    $("input.formdate").datepicker({
        changeMonth: true,
        changeYear: true,
        dateFormat: getDateFormat
    });
});
更新: 检查jQueryUIDatePickerAPI后,需要将字符串传递给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被解析,getDateFormat函数就会运行,因为它在对象文字符号中

表达式的计算结果为

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

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

表达式的计算结果为

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

+1回答正确,虽然我认为传递函数本身的引用会稍微清晰一些,传递函数的值贪婪,但这句话不是很好;我已经更新了它并采纳了你的建议向函数传递引用不起作用。当我选择日期时,它只返回空字符串。嗯,这不是你要问的——你问的是,无论元素是否被找到,它为什么被命名。看看实际的API文档,dateFormat似乎是一个字符串参数而不是一个函数,所以我必须更新我的答案……是的,我想是的。谢谢彼得的回复。帮助我更好地理解它。干杯。+1回答正确,虽然我认为传递函数本身的引用会稍微清晰一些,传递函数的值贪婪,但这句话并不好;我已经更新了它并采纳了你的建议向函数传递引用不起作用。当我选择日期时,它只返回空字符串。嗯,这不是你要问的——你问的是,无论元素是否被找到,它为什么被命名。看看实际的API文档,dateFormat似乎是一个字符串参数而不是一个函数,所以我必须更新我的答案……是的,我想是的。谢谢彼得的回复。帮助我更好地理解它。干杯