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";
}
È stato utile?

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.)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top