質問

次のコードがありますが、 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'
    }
);

読みやすいかどうかは議論の余地があります。


(おそらくそれよりもまだ短い方法がありますが、今すぐ行かなければなりません。)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top