Jquery contextmenu事件在ios/Safari上不起作用

6fe3ivhb  于 2023-05-17  发布在  jQuery
关注(0)|答案(1)|浏览(355)

我有一个按钮,这是应该触发一个自定义行为。所以我使用了Jquery的contextmenu事件。Please see my fiddle
目前我以这种方式绑定事件:

$( "#mybutton" ).contextmenu(function() {
  alert( "Handler for .contextmenu() called." );
});

我也试着这样绑定它:

$( "#mybutton" ).on('contextmenu', function() {
  alert( "Handler for .contextmenu() called." );
});

正如你将在我的fiddle中看到的,我通过使用以下命令禁用了longpress的默认ios行为:

body { -webkit-touch-callout: none !important; }
input { -webkit-user-select: none !important; }

我试了试我的小提琴:

  • Chrome浏览器,Windows上的最新版本(使用右键单击和触摸)
  • Android上的Chrome使用taphold
  • Internet Explorer,Windows上的最新版本(使用右键单击和触摸)
  • Opera,Windows上的最新版本(使用右键单击和触摸)
  • Firefox,Windows上的最新版本(使用右键单击和触摸)
  • Safari,在macOS Sierra上,(使用右键单击)

以上工作都按预期进行。不幸的是,这在我的iPad上的iOS/Safari上不起作用。当前的Safari版本是10.1.2
我试图通过将iPad连接到我的Mac并记录控制台输出来调试这一点。事件似乎永远不会触发。
我已经寻找了解决方案,但不幸的是,唯一的解决方案似乎要么使用jquery-mobiletaphold,我想避免或写一个自定义的timer-based event handlers,这也不是一个非常干净的解决方案,imho。
有没有人有过类似的经历,也许找到了解决方案?

mklgxw1f

mklgxw1f1#

我已经尝试了一些行为,这是一个小extran,我不能给予你一个确切的答案,试试这个代码也许
但是,根据我的经验,IOS和Safari总是做这些事情只是为了保持良好的用户体验,我建议你,不要依赖上下文菜单(至少在移动的设备上),而不是使用专用按钮打开html生成的菜单,就像典型的三点按钮一样,这是用户体验的问题。
祝你好运

$( "#mybutton" ).contextmenu(function(event) {
  event.preventDefault();
  console.log("asdf");
});
.mystyle{
  width: 450px;
  height: 450px;
}
<input class="mystyle" id="mybutton" type="button" value="button">

相关问题