Проверить, имеет ли элемент jQuery datepicker
У меня есть форма со многими элементами ввода. Некоторые из них представляют собой поля даты с использованием jQuery UI datepicker alraedy:
$("#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 в этом поле.
Ответы
Ответ 1
Ничего себе не могу поверить, что я пропустил это. Строка 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
}
Ответ 2
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.
Не удалось найти лучшего решения.
Ответ 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");
Есть ли более прямой способ?
Ответ 4
У меня появилось другое дело.
My script копирует последние элементы таблицы, включая datepicker.
jquery не будет работать, потому что скопированный элемент имеет знак "hasDatepicker".
Чтобы активировать datepicker в новом элементе, удалите это имя класса и инициируйте его, как это.
$("#yournewelementid").attr("class","your-class-name");
$("#yournewelementid").datepicker();
Ответ 5
Если section является элементом dom для средства выбора даты, проверьте, инициализирована ли уже, и если нет, сначала инициализируйте его как средство выбора даты (можно добавить свойства), а затем покажите его!
// If already initialized
if ( typeof selection !== 'undefined' && selection.length > 0)
$(selection).datepicker('show');
// otherwise initialize first and show
else
$(selection).datepicker().datepicker('show');
Ответ 6
Это было мое решение:)
if(typeof jQuery.fn.datepicker !== "undefined")