【问题标题】:Disable taphold default event, cross device禁用点击默认事件,跨设备
【发布时间】:2015-06-11 08:15:46
【问题描述】:

我正在努力禁用默认的点击浏览器事件。我在 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);
});

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

任何想法如何禁用默认点击或如何修复此代码以使其仅禁用点击事件并启用默认滑动事件?

编辑:现在我想设置一个超时,如果指针在同一个地方让我们说 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/得到这个

请注意,在上下滑动框时,滚动不起作用。

【问题讨论】:

    标签: javascript android jquery mobile touch


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-02
      • 1970-01-01
      • 1970-01-01
      • 2015-01-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多