【问题标题】:Right Click Contextmenu incorrectly displaying after returning false on menu在菜单上返回 false 后右键单击上下文菜单不正确显示
【发布时间】:2012-07-18 13:25:29
【问题描述】:

第一次发帖,但始终使用此站点作为示例。我的小问题是这个(我已经研究过了,但找不到解决我的问题的方法)......

我有一个包含 50 多个名称的文本列表,并且每天有一个项目(因此是一个 50+ x 7 的矩阵),我希望能够在其中右键单击每日文本(每天一个 div),并且每天显示与该项目特别相关的菜单。但是这没什么大不了的,因为我需要单独识别每个项目并使用 JS 的 DivID 来调用另一个函数,这变得很重要。我查看了其他 jquery 菜单选项,但无法弄清楚如何正确动态检索名称。

我遇到的问题不是创建菜单并捕获项目 ID,而是在右键单击后阻止 ContextMenu 出现。

我希望页面在其他地方有右键菜单,但不是在这些 DIV 元素上,我正在创建的只是菜单。

以下代码已被简化...

这是我正在使用的 JS:

function go(e,idname) 
    {
     var rightclick;
     e = e || window.event;
     if (e.which) rightclick = (e.which == 3);
     else if (e.button) rightclick = (e.button == 2);       
     var a = idname.id;
     a = (a.substring(11));  

     ShowContent('ToggleValueFloat');   // Display the DIV      

     $(document).ready(function() 
         {
          $('#ToggleValueFloat').html('MY MENU TEXT' + <a href="Javascript:ToggleDay(' + a + ');">EXAMPLE</a>);         
          return false;
         }); 

    return false; 
    }


function ShowContent(d) {
    if(d.length < 1) { return; }
    var dd = document.getElementById(d);
    AssignPosition(dd);
    dd.style.display = "block";
}

这是我用于示例的 PHP:

echo  '<a id="togglePopup' . (int)$arrayEId[$allEntries] . '" onmousedown="go(event,this); return false;">example</a>';

这是我用来显示的 DIV。

<div id="ToggleValueFloat" style="display:none;  position:absolute;  border-style: solid;  background-color: white;  padding: 5px;"></div>

我试图让它每次都返回 false,这样上下文菜单就不会显示,但它不起作用。我可以在页面上完全禁用右键单击,但这将证明比以往任何时候都没有效率。

任何想法/帮助都会很棒!我对选择持开放态度。谢谢,史蒂夫

【问题讨论】:

  • 如果没有适当的缩进,您的代码很难阅读。
  • 对不起,我很难用 SOF 上的代码标签来获取它。
  • 您只需将每行缩进四个空格,然后它将保留您的其他缩进并将其显示为代码。编辑器中的{} 工具将缩进一个块四个空格以将其显示为代码。

标签: php jquery contextmenu right-click


【解决方案1】:

对于初学者来说,这是一个问题:

 if (!e) var e = window.event;

其中,由于所有变量声明都被提升,因此与此相同:

 var e;
 if (!e) e = window.event;

您有一个名为 e 的参数,现在您正在创建一个同名的局部变量,该变量将覆盖它。如果参数 e 未定义,您应该用此替换该行:

e = e || window.event;

至于您的定位问题,您为什么不直接查看鼠标所针对的对象并确定(在显示菜单之前)目标对象是否是您要显示菜单的对象是否打开,然后仅在单击所需目标时才调用显示菜单的代码。

【讨论】:

  • 感谢您的快速提示。我已经为此修改了我的代码。 :) 但是,我的菜单创建得很好,但是通常的右键单击浏览器菜单显示在我制作的菜单顶部,它不应该,因为我告诉它“返回 false”......?浏览器菜单根本不应该显示。
  • 啊,你没有说你的问题出在标准的浏览器右键菜单上(或者我不明白)。有些浏览器不再允许您控制右键菜单,而有些浏览器具有首选项设置来确定是否允许网页破坏右键菜单。默认情况下,我认为 Chrome 和 Firefox 的最新版本都不会让网页破坏标准的右键菜单。甚至谷歌地图也有这个问题。
  • 嗯。奇怪的是我可以放这个.....“alert('Rightclick: ' + rightclick);”......就在鼠标检测到......“quirksmode.org/js/events_properties.html”...... ..我没有得到浏览器菜单......很奇怪。我用的是最新的FF。
  • This article 向您展示了您可以控制网页在 Firefox 中阻止/替换右键菜单的能力。
  • 感谢您的帮助。在您提到整个浏览器右键单击控件之后,我意识到一定有另一种方法可以做到这一点,所以我找到了这个并对其进行了修改以最终满足我的需求。 jsfiddle.net/Mottie/gW3fA
猜你喜欢
  • 2019-05-08
  • 2010-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多