禁用上下文菜单但不包括文本框

3

我希望在我的页面上禁用右键菜单,因为我有自己的菜单。但在文本框中应该可以使用系统默认右键菜单。

我是这样使用Javascript实现的:

document.oncontextmenu = function (e) {
    return false;
};

我考虑了一些类似于以下的内容:
document.oncontextmenu = function (e) {
    if (e.taget.nodeName != "text") {
    return false;
    }
};

但是nodeName始终是DIV。 在这个DIV中,我有一个JQGrid,其中包含文本框。
<div id="divGrdPos" style="padding:3px,0px,3px,0px;">
    <table id="JQGridCart" class="grdCart"></table>
</div>

有人可以帮我吗?

3个回答

5
你需要的是类似这样的东西:
document.addEventListener('contextmenu', function (event) {
    if (event.target.nodeName !== 'INPUT' && event.target.type !== 'text' && event.target.nodeName !== 'TEXTAREA') {
        event.preventDefault();
    }
});

它适用于输入框(type="text")和文本区域。

Jsfiddle: http://jsfiddle.net/QjmHy/


0
为什么要检查 text 文本框的 nodeName 是否为 INPUT
document.oncontextmenu = function (e) {
    console.log(e);
    if (e.target.nodeName != "INPUT") {
        return false;
    }
};​

http://jsfiddle.net/qr3fu/


此外,如果我写入input,它不起作用,因为我得到一个DIV。 Input字段位于此DIV中,并带有JQGrid的许多其他控件,所以我无法检查是否单击了此Input字段... - Senni
@Senni我的fiddle中的输入字段也在一个div中,也许您可以设置一个实时演示,这样我们就可以进行调查吗? - Musa
抱歉,这是不可能的,因为我无法在那里加载JQGrid。它是JQGrid内部的一个输入字段... - Senni

0

我找到了错误。

在我的代码中,我在网格上有一个mousedown()事件,这个事件在oncontextmenu()事件之前触发。而我的mousedown()会在检查右键点击后创建一个自定义的上下文菜单div。

所以我在mousedown()事件中检查nodeName是否为"input"并处理结果。

oncontextmenu()也是一样的。

谢谢你的建议。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接