Вопрос

У меня есть следующий код, однако, если input.formdate не найден, он по-прежнему будет запускать getDateFormat функция.Для меня это не имеет смысла.

Кто-нибудь знает причину?

$(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";
}
Это было полезно?

Решение

Функция getDateFormat запускается, как только Javascript анализируется, потому что он находится в литеральной записи объекта.

Ваше выражение оценивается как

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

Другие советы

Старый Ответ:
(основано на неправильном понимании вопроса - см. Комментарии)
Потому что вы вызываете функцию и передаете ее результат, вместо того, что вы должны делать:передача ссылки на функцию (т. е.рассматривая его как переменную).

Сделай это:

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

Обновить:
После проверки API jQuery UI DatePicker вам нужно передать строку в DateFormat.
Если вы не хотите, чтобы ваша функция выполнялась, если нет хотя бы одного ввода с классом formdate, вам нужно сделать это:

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

В качестве альтернативы, вы могли бы сделать это с помощью встроенного if:

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

Хотя спорно, более или менее ли это читабельно.


(Вероятно, есть еще более короткий путь, чем этот, но я должен идти сейчас.)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top