要素が見つからないときに関数が実行されるのはなぜですか?
-
10-07-2019 - |
質問
次のコードがありますが、 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";
}
解決
getDateFormat関数は、オブジェクトリテラル表記内にあるため、JavaScriptが解析されるとすぐに実行されます。
あなたの表現は
として評価されます$(function() {
$("input.formdate").datepicker({
changeMonth: true,
changeYear: true,
dateFormat: <RESULT_FROM_CALLING_getDateFormat()>
});
});
他のヒント
古い回答:
(質問の誤解に基づく-コメントを参照)
あなたがすべきことの代わりに、関数を呼び出してその結果を渡すからです:関数への参照を渡す(つまり、変数としてそれを扱う)。
これを実行:
$(function() {
$("input.formdate").datepicker({
changeMonth: true,
changeYear: true,
dateFormat: getDateFormat
});
});
更新:
jQuery UI DatePicker APIを確認した後、文字列をdateFormatに渡す必要があります。
formdateのクラスを持つ少なくとも1つの入力がない限り、関数を実行したくない場合は、これを行う必要があります:
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'
}
);
読みやすいかどうかは議論の余地があります。
(おそらくそれよりもまだ短い方法がありますが、今すぐ行かなければなりません。)
所属していません StackOverflow