Почему функция запускается, когда элементы не найдены?
-
10-07-2019 - |
Вопрос
У меня есть следующий код, однако, если 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'
}
);
Хотя спорно, более или менее ли это читабельно.
(Вероятно, есть еще более короткий путь, чем этот, но я должен идти сейчас.)