我希望能够在用户右键单击输入字段时禁用默认的上下文菜单,以便我可以显示自定义的上下文菜单。一般来说,通过以下方式禁用右键菜单相当简单:
$([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)如果我将jQuery选择器放在任何其他元素(而不是输入框)上,那么所有内容都将正常工作,Firefox将尊重preventDefault()调用,并且默认的右键菜单将不会显示。
return false
怎么样? - David Murdoche.which
而不是e.button
。 - karim79