У меня есть форма со многими входными элементами. Некоторые - поля даты с UI jQuery datepicker уже присоединенный:
$("#someElement").mask("9?9/99/9999").datepicker({showOn: 'button', buttonText:'Click here to show calendar', duration: 'fast', buttonImageOnly: true, buttonImage: /images/calicon.gif' });
Затем у меня есть ключевая команда, связанная с этой функцией:
function openCalendar() {
var selection = document.activeElement;
// { Need to test here if datepicker has already been initialized
$(selection).datepicker("show");
// }
}
Это работает отлично для элементов, которые уже имеют datepicker на них. Однако любые другие поля бросят ошибку JavaScript. Я задаюсь вопросом лучший способ протестировать, чтобы видеть, был ли datepicker уже инициализирован на том поле.
Ух ты, не могу поверить, что я пропустил это. Строка 108 ui.datepicker.js:
/* Class name added to elements to indicate already configured with a date picker. */
markerClassName: 'hasDatepicker',
Так что мне просто нужно проверить hasClass ('hasDatepicker')
. Это кажется наиболее простым способом. Кроме того, этот оператор проверяет, открыто ли в настоящее время средство выбора даты (для всех, кому интересно):
if ($("#ui-datepicker-div").is(":visible") && $("#ui-datepicker-div").html() != "") {
// datepicker is open. you need the second condition because it starts off as visible but empty
}
1) Если код выдает ошибку при попытке открыть datepicker, вы можете поместить код в try..catch
2) Вы можете установить некоторые данные в поле ввода при инициализации datepicker
$("#someElement").data("datepicker-initialized", true);
3 ) Вы можете использовать данные, сохраненные плагином datepicker
if($("#someElement").data("datepicker") != null){
// datepicker initialized
}
или
if($.data($('#someElement').get(0), 'datepicker')){
// datepicker initialized
}
4) datepicker внутренне использует функцию _getInst
if($.datepicker._getInst($('#someElement')[0]) != null){}
метод делает почти то же самое, что и в примере 3.
Не удалось найти лучшего решения.
Одно из основных решений - установить атрибут во время прикрепления datepicker, а затем проверить это:
$("#someElement").mask("9?9/99/9999")
.datepicker({showOn: 'button', buttonText:'Click here to show calendar', duration: 'fast', buttonImageOnly: true, buttonImage: /images/calicon.gif' })
.attr("data-calendar", "true");
Затем вы можете сделать:
if ($(selection).attr("data-calendar") == "true")
$(selection).datepicker("show");
Is есть более прямой путь?