Pergunta

Eu tenho o seguinte código, no entanto, se o input.formdate não é encontrado ainda vai executar a função getDateFormat. Isso não faz sentido para mim.

Alguém sabe a razão?

$(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";
}
Foi útil?

Solução

A função GetDateFormat é executado tão logo Javascript é analisado porque está dentro de uma notação literal de objeto.

A sua expressão é avaliada como

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

Outras dicas

Resposta antiga:
(baseado em mis-compreensão da questão - ver comentários)
Porque você está chamando a função e passando o seu resultado, em vez do que você deve fazer:. Passando uma referência para a função (ou seja, tratando-o como uma variável)

Faça o seguinte:

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

Atualização:
Depois de verificar a API jQuery UI DatePicker, você precisa passar uma string para dateFormat.
Se você não quer que seu função para executar a menos que haja pelo menos uma entrada com uma classe de formdate, você precisa fazer isso:

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

Como alternativa, você poderia fazê-lo com um inline se:

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

Apesar de ser discutível se isso é mais ou menos legível.


(Há provavelmente ainda um caminho mais curto do que isso, mas eu tenho que ir agora.)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top