【问题标题】:How to disable this below context menu in jquery when text box is disabled [duplicate]禁用文本框时如何在jquery中的上下文菜单下方禁用此功能[重复]
【发布时间】:2015-01-23 07:38:15
【问题描述】:

当文本框被禁用时,如何在 jquery 上下文菜单下方禁用此功能。我的右键单击禁用功能在所有浏览器中都可以正常工作 除了火狐。

注意:启用文本框后,禁用右键单击功能在所有浏览器中都可以正常工作。请在此处提供帮助。

我在我的正文标签中尝试了以下代码。但它不会在Firefox中工作

oncontextmenu="return false;" 

【问题讨论】:

  • 你能给我们看看代码吗? , 你是如何禁用它的 ?
  • 在我的正文标签中我添加了 oncontextmenu="return false;"
  • 将其添加到问题中,否则您可能会因为没有代码而获得大量反对票。还建议您提供一个复制问题的演示
  • @Sankar 用您的代码更新您的问题,直到无法完全提供帮助
  • @sankar 如果你仔细看帖子中的上下文菜单,你会发现,它是页面的常用菜单,而不是输入菜单,它具有复制和粘贴。为什么要禁止通用菜单?

标签: javascript jquery html css


【解决方案1】:

此代码在 Firefox 中有效:

document.oncontextmenu=disableclick;
function disableclick(event)
{
    event.preventDefault();
    alert("Context Menu Disabled");
    return false;    
}

http://jsfiddle.net/zumk5cta/1/

更新

contextmenu 事件不适用于 firefox 中的禁用元素,这是一种 firefox 行为,正如 here

所解释的那样

为了解决您的问题,我采纳了@Endy E 在他的回复here 中给出的想法:

html

<span class="inputWrapper">
    <input type="text" disabled />
    <div class="mouseEventTarget"></div>
</span>

css

.inputWrapper{
     position:relative;
}
.mouseEventTarget{
     position:absolute; 
     left:0; 
     right:0; 
     top:0; 
     bottom:0; 
     cursor: text
}

javascript

$(document).on('contextmenu', 'input:disabled + .mouseEventTarget',function(e){ 
    return false; 
});

fiddle

【讨论】:

  • 这个 dup 是一个不错的选择,并且也抓住了我一直试图向 OP 解释的内容。
  • @Teemu 是的,所以你认为它应该被标记为重复?
  • 其实我不会。 OP 有一些不同,因为弹出的是通用菜单而不是输入菜单。我会等到 OP 他们发布一些可以使用的代码(我希望他们会这样做),如果这样会出现,那么帖子中只有一张错误的图片,我会投票支持 dup。
  • 是的,这个问题应该被标记为重复。如果答案是相同的,那么捕获什么样的事件并不重要:Firefox 不会传播源自任何类型的禁用表单字段的事件。
  • 如果用户文本框位于中心,而其他元素位于它们之前或之后会怎样
【解决方案2】:

HTML

<div>
In order to prevent default behavior of Firefox browser <br /> you need to go for a kind of hack/trick here is the trick take the 
    <div class="inputWrapper"> &nbsp;
  <input class="disabled" disabled   type="text"  />

</div>

</div>  

CSS

.inputWrapper{display:inline-block;width:208px;z-index:9}
.disabled {
z-index: -1;
position: absolute;
width:200px
}

JQuery

$(document).on("contextmenu", ".inputWrapper", function(e){
   return false;
});

演示 JSFIDDLE

解释

为了防止火狐浏览器的默认行为 您需要采用一种 hack/trick 技巧,使用 z-index 将 div 带到输入框上方并触发父 div 的事件,即 inputWrapper

注意:父 div 的 z-index 应该总是大于输入元素

【讨论】:

    【解决方案3】:

    您可以使用 Javascript 和/或 HTML 属性(无论如何这实际上是一个 Javascript 事件处理程序)来执行此操作,如 described here:

    Live Demo

    <script language="javascript">
    document.onmousedown=disableclick;
    status="Right Click Disabled";
    Function disableclick(event)
    {
      if(event.button==2)
       {
         alert(status);
         return false;    
       }
    }
    </script>
    

    <body oncontextmenu="return false">
    ...
    </body>
    

    【讨论】:

    猜你喜欢
    • 2013-05-24
    • 1970-01-01
    • 1970-01-01
    • 2017-06-06
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 2021-09-27
    相关资源
    最近更新 更多