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";
}
¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top