gpt4 book ai didi

jQuery:preventDefault() 不适用于输入/单击事件?

转载 作者:行者123 更新时间:2023-12-03 22:25:38 25 4
gpt4 key购买 nike

我想在用户右键单击输入字段时禁用默认上下文菜单,以便我可以显示自定义上下文菜单。一般来说,通过执行以下操作很容易禁用右键单击菜单:

$([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...但它只是 mock 我,并且仍然显示该死的默认菜单!

2) 如果我将 jQuery 选择器放在任何其他元素(输入除外)上,那么一切都会正常,FF 将尊重 PreventDefault() 调用,并且默认的右键单击菜单将不会显示。

最佳答案

禁用默认上下文菜单的跨浏览器解决方案:

window.oncontextmenu = function() { return false };

要仅在给定元素内捕获上下文菜单事件,请使用:

document.getElementById('myElement').oncontextmenu=function(){

// Code to handle event
return false;
}

如果您尝试使用 oncontextmenu 以外的方法来中断右键单击事件,您将获得不同的结果,具体取决于具体的事件场景和浏览器。

在 jQuery 中:

$('myElement').bind('contextmenu', function(){

// Handle right-click event.
return false;
});

您还可以使用 jQuery 的 event.which 来确定按下了哪个按钮,但您仍然需要取消默认的 contextmenu 事件:

   // Cancel default oncontextmenu event.
$(element).bind('contextmenu', function(){ return false });

$(element).mousedown(function(event){

switch (event.which)

case 1:
// Left mouse
break;

case 2:
// Middle mouse
break;

case 3:
// Right mouse.
break;

});

我已经在 IE6(在 Wine 下)、Chrome 11、Firefox 3.6、Opera 11 和 Safari 中对此进行了测试。

关于jQuery:preventDefault() 不适用于输入/单击事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2739627/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com