Тест, если элемент уже имеет jQuery datepicker

У меня есть форма со многими входными элементами. Некоторые - поля даты с 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 уже инициализирован на том поле.

40
задан macca1 5 April 2010 в 16:00
поделиться

3 ответа

Ух ты, не могу поверить, что я пропустил это. Строка 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
}
69
ответ дан 27 November 2019 в 01:31
поделиться

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.

Не удалось найти лучшего решения.

12
ответ дан 27 November 2019 в 01:31
поделиться

Одно из основных решений - установить атрибут во время прикрепления 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 есть более прямой путь?

1
ответ дан 27 November 2019 в 01:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: