我想在用户右键单击输入字段时禁用默认 contextMenu,以便我可以显示自定义 contextMenu。一般来说,通过执行以下操作很容易禁用右键菜单:
$([whatever]).bind("click", function(e) { e.preventDefault(); });
事实上,除了 FF 中的输入字段之外,我几乎可以在每个元素上执行此操作 - 任何人都知道为什么或可以将我指向一些文档吗?
这是我正在使用的相关代码,谢谢大家。
HTML:
<script type="text/javascript">
var r = new RightClickTool();
</script>
<div id="main">
<input type="text" class="listen rightClick" value="0" />
</div>
JS:
function RightClickTool(){
var _this = this;
var _items = ".rightClick";
$(document).ready(function() { _this.init(); });
this.init = function() {
_this.setListeners();
}
this.setListeners = function() {
$(_items).click(function(e) {
var webKit = !$.browser.msie && e.button == 0;
var ie = $.browser.msie && e.button == 1;
if(webKit||ie)
{
// Left mouse...do something()
} else if(e.button == 2) {
e.preventDefault();
// Right mouse...do something else();
}
});
}
} // Ends Class
编辑:
抱歉,在阅读了评论后,我意识到我应该澄清一些事情。
1)上面的代码确实有效......在某种意义上。代码能够通过单击哪个按钮进行排序,它只是不在乎我说 e.preventDefault() 并且仍然会弹出右键菜单。换句话说,如果您在 e.button 上设置警报,您会得到 1 或 0 表示左侧,2 表示右侧......但它只是在嘲笑我,仍然显示该死的默认菜单!
2) 如果我将 jQuery 选择器放在任何其他元素(输入除外)上,那么一切都会正常工作,FF 将尊重 preventDefault() 调用,并且不会显示默认的右键单击菜单。