在特定元素上禁用移动长按上下文菜单

Posted

技术标签:

【中文标题】在特定元素上禁用移动长按上下文菜单【英文标题】:Disable mobile longpress context menu on specific elements 【发布时间】:2016-08-08 15:59:18 【问题描述】:

我有一个带有各种控件的图片库。其中一个控件是基本的删除功能,要删除,请单击并按住大约 1 秒钟以确认询问您是否要删除。一切正常,只是在移动设备上,它经常会弹出“将图像另存为等”菜单,在执行预期操作之前必须关闭该菜单。

我已经阅读了各种修复程序,但它们似乎都不适用于我 Galaxy S5 上当前版本的 Chrome 手机,而我能找到的最新答案是 2013 年的。

我发现有人说上下文菜单是它自己的功能,所以我尝试了这样的事情:

    window.oncontextmenu = function(event) 
        event.preventDefault();
        event.stopPropagation();
        return false;
    ;

但这并没有阻止上下文菜单在我的 S5 上显示。正如我所说,我希望找到一种解决方案来防止它出现在某些项目上,而不是整个窗口上。

感谢 Tasos 的解答

document.getElementById('yourElement').oncontextmenu = function(event) 
    event.preventDefault();
    event.stopPropagation(); // not necessary in my case, could leave in case stopImmediateProp isn't available? 
    event.stopImmediatePropagation();
    return false;
;

【问题讨论】:

你添加了这个 CSS -webkit-user-select: none;禁用长按时的文本选择。我认为你没有遇到这个问题 还有 (event.stopImmediatePropagation();) -- 试着把它放在下面 (event.stopPropagation();) -- 否则在这里查看***.com/questions/12304012/… CSS 属性也不起作用。 Tasos,请用你的 stopImmediateProp 解决方案发布答案​​,因为它有效,我想给你信用。也将更新原始问题。谢谢! 【参考方案1】:

我在这里(重新)发布答案,因为起初我没有看到它在问题中:)

所以只需使用此代码,使用 stopImmediatePropagation :

document.getElementById('yourElement').oncontextmenu = function(event) 
    event.preventDefault();
    event.stopPropagation(); // not necessary in my case, could leave in case stopImmediateProp isn't available? 
    event.stopImmediatePropagation();
    return false;
;

【讨论】:

以上是关于在特定元素上禁用移动长按上下文菜单的主要内容,如果未能解决你的问题,请参考以下文章

在 Android 上禁用标注(上下文菜单)

在不禁用上下文菜单的情况下管理 UITextfiled 上的长按?

如何在 Chrome 的信息亭模式下禁用右键单击/长按的上下文菜单?

如何彻底去除手机浏览器长按震动?

Mapsforge 重写:长按地图上的上下文菜单

禁用主窗口的标题上下文菜单