Javascript 为什么函数在没有找到元素的情况下运行?
我有以下代码,但是如果找不到input.formdate,它仍将运行getDateFormat函数。这对我来说毫无意义 有人知道原因吗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() {
$(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似乎是一个字符串参数而不是一个函数,所以我必须更新我的答案……是的,我想是的。谢谢彼得的回复。帮助我更好地理解它。干杯