Perché la funzione viene eseguita quando non sono stati trovati elementi?
-
10-07-2019 - |
Domanda
Ho il seguente codice, tuttavia se input.formdate
non viene trovato, verrà comunque eseguita la funzione getDateFormat
. Questo non ha senso per me.
Qualcuno conosce il motivo?
$(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";
}
Soluzione
La funzione getDateFormat viene eseguita non appena viene analizzato Javascript perché si trova all'interno di una notazione letterale di oggetto.
La tua espressione viene valutata come
$(function() {
$("input.formdate").datepicker({
changeMonth: true,
changeYear: true,
dateFormat: <RESULT_FROM_CALLING_getDateFormat()>
});
});
Altri suggerimenti
Vecchia risposta:
(basato sulla comprensione errata della domanda - vedi commenti)
Perché stai chiamando la funzione e passi il suo risultato, invece di quello che dovresti fare: passare un riferimento alla funzione (ovvero trattarla come una variabile).
Fai questo:
$(function() {
$("input.formdate").datepicker({
changeMonth: true,
changeYear: true,
dateFormat: getDateFormat
});
});
Aggiornamento:
Dopo aver verificato l'API DatePicker dell'interfaccia utente jQuery, è necessario passare una stringa a dateFormat.
Se non vuoi che la tua funzione venga eseguita a meno che non ci sia almeno un input con una classe di formdate, devi farlo:
if ( $('input.formdate').length > 0 )
{
$("input.formdate").datepicker
(
{ changeMonth: true
, changeYear: true
, dateFormat: getDateFormat()
}
);
}
In alternativa, puoi farlo con un inline se:
$("input.formdate").datepicker
(
{ changeMonth: true
, changeYear: true
, dateFormat:
$('input.formdate').length > 0 ? getDateFormat() : 'dd-mm-yy'
}
);
Anche se è discutibile se è più o meno leggibile.
(Probabilmente c'è ancora un modo più breve di quello, ma ora devo andare.)