У меня есть угловое приложение со следующей директивой:
'use strict';
/**
* Simple date picker
*/
angular.module('twicketsApp').directive('twicketsDatePickerSimple', [function() {
return {
restrict: 'A',
require: 'ngModel',
link: function(scope, element, attrs, ngModel) {
function initDatepicker() {
element.click(function() {console.log('datepicker clicked');});
element.datepicker({
dateFormat: 'yy-mm-dd',
changeMonth: false,
changeYear: false,
minDate: scope.futureOnly ? 0 : null,
maxDate: scope.futureOnly ? 365 : null,
onSelect: function (date) {
ngModel.$setViewValue(date); // update date value back to the model
},
beforeShow: function(input, inst) {
inst.dpDiv.addClass('simple-date-panel');
}
});
}
attrs.$observe('futureOnly', function (value) {
scope.futureOnly = value === 'true' ? true : false; // attrs come in as a string
initDatepicker();
});
}
};
}]);
Как вы можете видеть, на этом элементе есть как обработчик кликов, так и датпикер (обработчик кликов предназначен только для отладки).
Когда я слегка касаюсь элемента в сафари в любом iOS, срабатывает обработчик кликов - но датапикер не открывается. Но если я нажимаю немного сложнее, функция datepicker открывается (это не долгое нажатие, так как длительное нажатие не запускает обработчик кликов или не открывает датпикер).
Абсолютно не знаю, почему это происходит. Есть идеи?
Мой проект использует fastclick, который может иметь аффект.
Исправлено следующим грязным взломом, подумал, что я могу сделать это так, но надеялся, что будет лучшее решение.
...
function initDatepicker() {
element.click(function() {element.datepicker( "show" );});
element.datepicker({
...
Для мобильных и сенсорных устройств или экранов JQuery UI Datepicker инициализирует компонент datepicker, но никогда не запускает метод "show". Затем вы можете использовать что-то вроде этого:
$(".datepicker").datepicker();
$(".datepicker").on("click", function () {
$(this).datepicker("show");
});