【问题标题】:Using jQuery-mobile popup as context menu使用 jQuery-mobile 弹出菜单作为上下文菜单
【发布时间】:2013-02-19 15:37:18
【问题描述】:

我使用 jQuery 移动弹出窗口作为右键单击桌面和点击移动设备时触发的上下文菜单。

我的问题:当我右键单击时,会出现弹出窗口 - 它工作正常。但是当弹出窗口打开并且我在弹出窗口之外单击鼠标右键时,弹出窗口将关闭,并且会出现标准浏览器上下文菜单而不是新弹出窗口。

弹出窗口在其自身下创建一个新层(其类是“.ui-popup-screen”)以捕获事件,但类似于

$(".ui-popup-screen").on("click", function(event) {
    event.preventDefault();
    $('#myElementWithPopupContextMenu').contextmenu();
    return false;
});

不工作。

有什么解决办法吗?

【问题讨论】:

  • 你有一些代码给我们,或者有一个用于 taphold/ricghtclick-solution 的 jsfidle 吗?谢谢!
  • 警告来自 google 的未来读者:如果您打算使用复制/粘贴功能,则使用 jqm 弹出窗口作为上下文菜单是一个坏主意。 jqm 弹出窗口会阻止其他元素获得焦点,这会导致流行的复制到剪贴板的方法失败。

标签: jquery-mobile


【解决方案1】:

我喜欢按照模式写。

// prevent default contextmenu and trigger as 'custom-contextmenu'
$(".ui-popup-screen")
    .bind("contextmenu",function(e) {
        e.preventDefault();

        // create and show menu
        $("#myElementWithPopupContextMenu").trigger( "custom-contextmenu" );
    });

// context menu handler
$("#myElementWithPopupContextMenu").bind( "custom-contextmenu", function(e) {
    // my context menu
}

【讨论】:

  • 嗯,问题是,jQuery 以某种方式阻止了 .ui-popup-screen 层上的事件。当我写 $(".ui-popup-screen in").bind("click", function(event) { event.preventDefault(); alert("something"); return false; }); 并在弹出窗口之外单击时,什么也没有发生
  • $("#yourPopupId").on({ popupbeforeposition: function () { $('.ui-popup-screen').off(); } });
  • 哇,谢谢,这正是我想要的。请把它写成另一个答案,这样我就可以将你的答案标记为已接受。
  • 你有一些代码给我们,或者有一个用于 taphold/ricghtclick-solution 的 jsfidle 吗?谢谢!
猜你喜欢
  • 1970-01-01
  • 2013-01-12
  • 1970-01-01
  • 1970-01-01
  • 2013-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多