¿Por qué se ejecuta la función cuando no se encuentran elementos?
-
10-07-2019 - |
Pregunta
Tengo el siguiente código, sin embargo, si no se encuentra input.formdate
, seguirá ejecutando la función getDateFormat
. Esto no tiene sentido para mí.
¿Alguien sabe el 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";
}
Solución
La función getDateFormat se ejecuta tan pronto como se analiza Javascript porque está dentro de una notación literal de objeto.
Su expresión se evalúa como
$(function() {
$("input.formdate").datepicker({
changeMonth: true,
changeYear: true,
dateFormat: <RESULT_FROM_CALLING_getDateFormat()>
});
});
Otros consejos
Respuesta anterior:
(basado en una mala comprensión de la pregunta - ver comentarios)
Debido a que está llamando a la función y pasando su resultado, en lugar de lo que debería estar haciendo: pasar una referencia a la función (es decir, tratarla como una variable).
Haz esto:
$(function() {
$("input.formdate").datepicker({
changeMonth: true,
changeYear: true,
dateFormat: getDateFormat
});
});
Actualización :
Después de verificar la API jQuery UI DatePicker, debe pasar una cadena a dateFormat.
Si no desea que su función se ejecute a menos que haya al menos una entrada con una clase de formulario, necesita hacer esto:
if ( $('input.formdate').length > 0 )
{
$("input.formdate").datepicker
(
{ changeMonth: true
, changeYear: true
, dateFormat: getDateFormat()
}
);
}
Alternativamente, puede hacerlo con una línea si:
$("input.formdate").datepicker
(
{ changeMonth: true
, changeYear: true
, dateFormat:
$('input.formdate').length > 0 ? getDateFormat() : 'dd-mm-yy'
}
);
Aunque es discutible si eso es más o menos legible.
(Probablemente todavía hay un camino más corto que eso, pero tengo que irme ahora).