Подтвердить что ты не робот

Проверить, имеет ли элемент 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 в этом поле.

4b9b3361

Ответ 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")