我部分修改了jquery.tapend
插件,以阻止它在touchmove上触发tap事件以及其他一些问题。这是代码:
(function($) {
$.fn.tap = function(fn) {
return $(this).click.apply(this, arguments) // listen for the final event
.bind('touchstart.jqtapstart', function waitForTouchEnd(e) {
function click(e) {
cancel(e);
$(this).trigger('click');
}
function move(e) {
clearTimeout(timeout);
$this.unbind('.jqtapend');
}
function cancel(e) {
clearTimeout(timeout);
if ('object' === typeof e && 'function' === typeof e.preventDefault) {
e.preventDefault();
e.stopPropagation();
}
$this.unbind('.jqtapend');
}
var timeout = setTimeout(cancel, 250)
, $this = $(this) // maybe > 1 node
;
$this.bind({
'touchend.jqtapend': click,
'touchmove.jqtapend': move,
'touchleave.jqtapend': cancel
});
});
};
})(jQuery);
出于某种原因,Android设备上的每个“tap”事件都会触发两次,很少在iOS上发生,但仍然会发生。任何人都可以看到为什么会发生这种情况,或者有理论吗?
请注意,我出于某些原因选择不使用jquery mobile。