Porque é que a função de execução quando não há elementos encontrados?
-
10-07-2019 - |
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";
}
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.)