1

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

2 に答える 2

6

古い回答:
(質問の誤解に基づいて - コメントを参照してください)
関数への参照を渡す (つまり、変数として扱う) べきではなく、関数を呼び出してその結果を渡すためです。

これを行う:

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

それが多かれ少なかれ読みやすいかどうかは議論の余地がありますが.


(おそらくそれよりももっと短い道があるでしょうが、私は今行かなければなりません。)

于 2009-03-12T00:12:47.893 に答える
5

getDateFormat 関数は、オブジェクト リテラル表記内にあるため、Javascript が解析されるとすぐに実行されます。

あなたの式は次のように評価されます

$(function() {
    $("input.formdate").datepicker({
        changeMonth: true,
        changeYear: true,
        dateFormat: <RESULT_FROM_CALLING_getDateFormat()>
    });
});
于 2009-03-12T00:13:00.403 に答える