这应该消除 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;
});
});
编辑 - 已经有一个接受的答案,这个回复更像是一个附加说明。但是 nirmal 在 cmets 中是正确的,即模拟鼠标事件的触摸设备可能会导致并发症。因此,上面的代码更适合仅用于触摸事件。
为了更完整地回答这个问题,我将发布我同时处理触摸和鼠标事件的方法。然后,任一序列都会触发一个名为 page:tap 的自定义事件。然后可以按如下方式监听这些模拟点击:
$(subject).on('page:tap', function() { ... });
鼠标和触摸事件是分开的,通过在touchend 和click 之间向body 添加一个类来防止任何触发附加事件的模拟,当后者发生时再次删除它。
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,这在一定程度上取决于整体设置。