Question

J'ai le code suivant. Cependant, si le input.formdate n’est pas trouvé, il continuera à exécuter la fonction getDateFormat . Cela n'a pas de sens pour moi.

Quelqu'un connaît-il la raison?

$(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";
}
Était-ce utile?

La solution

La fonction getDateFormat est exécutée dès que Javascript est analysé car il se trouve dans une notation littérale d'objet.

Votre expression est évaluée comme

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

Autres conseils

Ancienne réponse:
(basé sur une mauvaise compréhension de la question - voir les commentaires)
Parce que vous appelez la fonction et transmettez son résultat, au lieu de ce que vous devriez faire: transmettre une référence à la fonction (c'est-à-dire la traiter comme une variable).

Faites ceci:

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

Mise à jour:
Après avoir vérifié l'API DatePicker de l'interface utilisateur jQuery, vous devez passer une chaîne à dateFormat.
Si vous ne souhaitez pas que votre fonction soit exécutée sauf s'il existe au moins une entrée avec une classe de date de formulaire, procédez comme suit:

if ( $('input.formdate').length > 0 )
{
    $("input.formdate").datepicker
    (
        { changeMonth: true
        , changeYear: true
        , dateFormat: getDateFormat()
        }
    );
}

Vous pouvez également le faire avec un inline si:

$("input.formdate").datepicker
(
    { changeMonth: true
    , changeYear: true
    , dateFormat:
        $('input.formdate').length > 0 ? getDateFormat() : 'dd-mm-yy'
    }
);

Bien que ce soit discutable si c'est plus ou moins lisible.


(Il existe probablement encore un moyen plus court que cela, mais je dois y aller maintenant.)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top