我想禁用在我的Web应用程序中长时间点击(触摸并按住)图像后出现的上下文菜单.我看过不同想法的帖子怎么做,但它们似乎都不适合我.
有没有办法通过HTML/CSS/Javascript在Android上执行此操作?
我正在使用PhoneGap和jQM为iPhone和iPad构建应用程序
<div class="ui-block-a">
<a id="btnLink" href="#pageID" data-role="button"></a>
</div>
Run Code Online (Sandbox Code Playgroud)
它运行正常,但是当我在设备上运行它(没有尝试模拟器)并长按时,我会在普通浏览器中获得默认的iPhone菜单以打开或复制链接.
如何在我的应用中禁用此默认功能?
我试过这些没有成功:
$("a").click(function(event) {
event.preventDefault(); // long press menu still apear
});
$("a").bind('click',function(event) {
console.log(['preventingclick',event.type]);
event.preventDefault(); // long press menu still apear
});
Run Code Online (Sandbox Code Playgroud)
如果我绑定'taphold'我仍然看到长按菜单,但在我点击取消后我看到控制台日志:["防止长按","taphold"]
$("a").bind('taphold', function(event) {
console.log(['preventing long press',event.type]);
event.preventDefault(); // long press menu still apear
});
Run Code Online (Sandbox Code Playgroud)
如果我在'taphold'事件中使用委托代码如下:
$("a").delegate('taphold', function(event) {
console.log(['preventing long press',event.type]);
event.preventDefault();
});
Run Code Online (Sandbox Code Playgroud)
将解决问题,但我不能再附加任何事件,因此我的按钮之后将不起作用.
$('#btnLink').bind("click", function() {
$.mobile.changePage('mypage', 'slide'); // won't fire any more because of the delegate before
});
Run Code Online (Sandbox Code Playgroud)
我知道代表将在现在和将来适用于所有元素,但我认为我接近答案,但还没有.
提前致谢
我有一个应该触发自定义行为的按钮。因此我正在使用 Jquery 的contextmenu
事件。请看我的小提琴。
目前我以这种方式绑定事件:
$( "#mybutton" ).contextmenu(function() {
alert( "Handler for .contextmenu() called." );
});
Run Code Online (Sandbox Code Playgroud)
我也尝试像这样绑定它:
$( "#mybutton" ).on('contextmenu', function() {
alert( "Handler for .contextmenu() called." );
});
Run Code Online (Sandbox Code Playgroud)
正如您将在我的小提琴中看到的,我使用以下命令禁用了 longpress 的默认 ios 行为:
body { -webkit-touch-callout: none !important; }
input { -webkit-user-select: none !important; }
Run Code Online (Sandbox Code Playgroud)
我测试了我的小提琴:
以上所有工作都按预期工作。不幸的是,这不适用于我的 Ipad 上的 ios/Safari。当前的 Safari 版本是10.1.2
我试图通过将 Ipad 连接到我的 mac 并记录控制台输出来调试它。似乎该事件从未被触发。 …
我正在使用http://medialize.github.io/jQuery-contextMenu/在右键单击时生成一些选项,它在桌面浏览器上运行良好,但在触摸屏设备上不起作用。 我应该添加什么代码才能使其在 ipad 等触摸设备上工作
我在桌面上使用以下代码
$(function(){
jQuery.contextMenu({
selector: '.context-menu-one',
callback: function(key, options) {
window.console && console.log(m) || alert(m); */
if(key=="delete")
{
//some action
}
if(key=="copy")
{
//some action
}
},
items: {
"copy": {name: "Kopieren", icon: "copy"},
"delete": {name: "Löschen", icon: "delete"},
}
});
Run Code Online (Sandbox Code Playgroud) 我有一个带有各种控件的图片库。其中一个控件是基本的删除功能,要删除,请单击并按住约 1 秒钟以确认询问您是否要删除。一切正常,只是在移动设备上它经常导致“将图像另存为等”菜单弹出,必须在执行预期操作之前将其关闭。
我已经阅读了各种修复程序,但似乎没有一个适用于我的 Galaxy S5 上当前版本的 Chrome 移动版,我能找到的最新答案是 2013 年的。
我发现有人说上下文菜单是它自己的功能,所以我尝试了这样的事情:
window.oncontextmenu = function(event) {
event.preventDefault();
event.stopPropagation();
return false;
};
Run Code Online (Sandbox Code Playgroud)
但这并没有阻止上下文菜单显示在我的 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;
};
Run Code Online (Sandbox Code Playgroud)