禁用taphold默认事件,跨设备

时间:2015-06-11 08:15:46

标签: javascript android jquery mobile touch

我正在努力禁用默认的taphold浏览器事件。我在Google上找到的任何内容都没有提供任何帮助。我只有Android 4.4.4移动版和Chrome开发工具进行测试。我尝试过CSS修补程序,例如webkit-touch-callout和其他人,但显然他们不适用于Android,也不适用于Chrome开发工具。 我也试过检测右键,(e.button == 2),它没有用。

我想出了一个解决方案,但它解决了一个问题并创造了另一个问题。我只想为长按'做一个自定义操作。所选锚点的事件,我不希望出现默认弹出窗口(在新标签页中打开,复制链接地址等) 这就是我所做的:

var timer;
var tap;

$("body").on("touchstart", my_selector, function(e) {
    e.preventDefault();
    timer = setTimeout(function() {
        alert('taphold!');
        tap=false;
    },500);
});

$("body").on("touchend", my_selector, function() {
    if(tap) alert('tap');
    else tap=true;
    clearTimeout(timer);
});

它成功禁用了默认的taphold事件,并且没有出现上下文菜单。但是它也会禁用有用的事件,例如滑动。链接位于垂直菜单中,菜单高于屏幕,因此用户必须滚动它。如果他试图滚动,从一个锚点开始,它就不会滚动,它会发出提醒!'

任何想法如何禁用taphold默认值或如何修复此代码,以便仅禁用点按事件并启用默认刷卡事件?

编辑:现在我考虑设置超时,如果指针位于相同的位置,让我们说100毫秒,那么就防止默认操作。但是e.preventDefault();不在setTimeout回调中工作。

所以现在我只是询问最简单的例子。我可以在经过一定时间后(触摸仍然存在时)阻止默认操作。

这是我整个小提琴的问题。 http://jsfiddle.net/56Szw/593/ 这不是我的代码,我是从http://www.gianlucaguarini.com/blog/detecting-the-tap-event-on-a-mobile-touch-device-using-javascript/

得到的

请注意,在向上和向下滑动框时,滚动功能无效。

1 个答案:

答案 0 :(得分:5)

我得到了解决方案。真是太简单了!我不知道有一个oncontextmenu事件。这解决了一切:

$("body").on("contextmenu", my_selector, function() { return false; });