Используя ES2017, вы должны иметь это как объявление функции
async function foo() {
var response = await $.ajax({url: '...'})
return response;
}
и выполнить его следующим образом.
(async function() {
try {
var result = await foo()
console.log(result)
} catch (e) {}
})()
Или синтаксис Promise
foo().then(response => {
console.log(response)
}).catch(error => {
console.log(error)
})
Я действительно хочу, чтобы вы Modernizr
, но ...
var supportsTouch = 'ontouchstart' in window || navigator.msMaxTouchPoints;
var eventType = supportsTouch ? 'ontouchstart' : 'click';
Затем объявите своих слушателей событий как таковых:
$('#id').on(eventType, function(e) {
alert('id was clicked');
});
Это должно устранить задержку в 300 мс и запускать имитированные клики на рабочем столе и сенсорных устройствах:
$('#id').on('mousedown touchstart', function() {
$(this).one('mouseup touchend', function() {
alert('id was clicked');
});
});
Если элемент имеет ссылку в нем (обычно это срабатывает click
), для этого потребуется некоторое Адаптация:
$('#id a').on('mousedown touchstart', function() {
var destination = this.attr('href');
$(this).one('mouseup touchend', function() {
if (destination) window.location = destination;
});
});
Изменить - уже имея принятый ответ, этот ответ был скорее дополнительным примечанием. Но Нирмал был прав в комментариях, которые касаются устройств, имитирующих события мыши, могут привести к осложнениям. Таким образом, вышеупомянутый код лучше подходит для использования только с событиями касания.
Чтобы получить более полный ответ с этим ответом, я отправлю свой подход для одновременной обработки событий касания и мыши. Любая последовательность запускает пользовательское событие с именем page:tap
. Прослушивание этих имитируемых кликов можно выполнить следующим образом:
$(subject).on('page:tap', function() { ... });
События мыши и касания разделяются, и любая эмуляция, запускающая дополнительные события, предотвращается путем добавления класса к body
между touchend
и click
, удалив его снова, когда произойдет последнее.
var root = $('body'), subject = '#example_1, #example_2';
$(document).on('mousedown touchstart', subject, function(e) {
if (e.type == 'mousedown' && e.which != 1) return; // only respond to left clicks
var mean = $(e.currentTarget);
mean.one('mouseup touchend', function(e) {
if (e.type == 'touchend' && !root.hasClass('punch')) root.addClass('punch');
else if (root.hasClass('punch')) return;
mean.trigger('page:tap');
});
})
.on('click', subject, function() {
root.removeClass('punch');
return false;
});
Можно также добавить класс к самому активному элементу или html
, например, это немного зависит от настройки, как целое.
Применить fastclick к вашему приложению. Там вы найдете файл .js и документацию. Самый короткий (jQuery) способ реализации этого будет:
$(function() {
FastClick.attach(document.body);
});
Если вы не используете jQuery, вы можете выбрать другой способ:
if ('addEventListener' in document) {
document.addEventListener('DOMContentLoaded', function() {
FastClick.attach(document.body);
}, false);
}
Сообщите мне если вам нужна дополнительная помощь!
Это прямая ссылка к файлу fastclick.js
Вы можете попробовать:
var clickEvent = ((document.ontouchstart!==null)?'click':'touchstart');
$("#mylink").on(clickEvent, myClickHandler);