Pourquoi la fonction est-elle exécutée alors qu'aucun élément n'a été trouvé?
-
10-07-2019 - |
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";
}
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.)