Скрыть ui-datepicker-календарь на основе атрибута элемента
У меня есть несколько inputs на моей странице, все из которых имеют интерфейс jQuerydatepicker виджет прикреплен к ним.
То, что я хотел бы сделать, - это show/hide .ui-datepicker-calendar, основанный на атрибуте data-calendar элемента input.
Например:
<input type="text" data-calendar="false" />
<input type="text" data-calendar="false" />
<input type="text" data-calendar="true" />
Итак, первые два не должны показывать .ui-datepicker-calendar, но последние должны.
Я думал, что смогу использовать событие beforeShow для установки отображения элемента, однако в момент запуска события .ui-datepicker-calendar еще не существуют:
$('input').datepicker({
beforeShow: function(el, dp) {
$('.ui-datepicker-calendar').toggle( !$(el).is('[data-calendar="false"]') );
}
});
Я уже смотрел на подобные вопросы, и ответ заключается в том, чтобы использовать CSS для скрытия элемента .ui-datepicker-calendar:
.ui-datepicker-calendar {
display: none;
}
Однако это не будет работать для меня, так как мне нужно установить свойство отображения на основе атрибута элемента data-calendar.
datepicker API но ничего не нашел.
Вот простая базовая скрипка
Вот как я хотел бы это показать, если data-calendar является ложным
2 ответа:
Сделав еще несколько поисков, я наткнулся на этот вопрос, который помог мне решить мою проблему.
Когда событие
beforeShowсрабатывает, добавьте/удалите класс на элементе#ui-datepicker-div(это существует, как только datepicker был присоединен).$('input').datepicker({ beforeShow: function(el, dp) { $('#ui-datepicker-div').toggleClass('hide-calendar', $(el).is('[data-calendar="false"]')); } });Тогда просто добавьте стиль для
.ui-datepicker-calendarв классе.hide-calendar:.hide-calendar .ui-datepicker-calendar { display: none; }Вот рабочая скрипка
Проверьте атрибут data для каждого входного элемента.
1) .data () - метод, используемый для хранения произвольных данных, связанных с согласованными элементами.
2) .each () - метод, используемый для итерации объектов jQuery.
Попробуйте это.
$('input[type=text]').each(function(){ alert($(this).data('calendar')); if($(this).data('calendar')){ $(this).datepicker(); } });Рабочая Скрипка
Из ваших комментариев,
$('input').datepicker(); $('input[type=text]').each(function () { if ($(this).data('calendar')) { $(this).datepicker(); } else{ $(this).datepicker('destroy'); //Removes the datepicker functionality } });Обновленная Скрипка