Javascript 为什么return false使用alert而不是console.log工作

Javascript 为什么return false使用alert而不是console.log工作,javascript,jquery,Javascript,Jquery,我有个问题。使用此html: <div id="d"><div>Click me!</div><div>Or me</div></div> 它阻止上下文菜单显示和警告,但当我使用此代码时: $("#d").on("mousedown", "div", function (e){ console.log('clicked'); if (e.which == 3) alert('left button clic

我有个问题。使用此html:

<div id="d"><div>Click me!</div><div>Or me</div></div>
它阻止上下文菜单显示和警告,但当我使用此代码时:

$("#d").on("mousedown", "div", function (e){
    console.log('clicked');
    if (e.which == 3) alert('left button clicked');
    return false;
});
$("#d").on("mousedown", "div", function (e){
    console.log('clicked');
    if (e.which == 3) console.log('left button clicked');
    return false;
});
它会登录到控制台,但不会阻止上下文菜单。我很困惑


哦,如果你碰巧发现了一个复制品或其他东西,请耐心等待。我确实试过找到它。

您没有用第一个代码阻止上下文菜单。由于alertwindow获得焦点,一些浏览器不再打开它。阻止菜单的不是返回false,而是警报本身。

我添加了一个更新的小提琴:

有关更多信息,请参阅


其余的我都同意;取消上下文菜单的不是返回值,而是警报。

您的小提琴是一样的。@SLaks-我刚刚意识到这一点。固定的该死的JSFIDLE使用的是旧版本。Chrome为这两种情况都提供了上下文菜单。@pax-真的,Chrome不支持Mesh,不是右键单击吗?所以两个都不应该工作吗?他们为什么不工作?哪一个都不工作?如果您指的是OP的示例:第一个示例使用一个警报,该警报会导致浏览器取消contextmenu,因为否则alertbox和contextmenu会冲突。第二个使用console.log,它不会导致浏览器取消contextmenu,因为它是唯一的UI元素。所以我不知道你在问什么?我的代码之所以有效,是因为它显式地侦听在打开contextmenu之前触发的contextmenu事件,实际上取消了contextmenu的显示。我是OP,我想知道为什么我的代码一开始不起作用。为什么返回false不能阻止上下文菜单,忽略了OP:My bad这一事实。它与返回false或任何其他值无关。在第一个示例中,警报框和上下文菜单冲突,迫使浏览器选择一个或另一个,导致警报框显示,上下文菜单被取消,否则浏览器将被迫同时弹出2个UI元素,导致用户混淆。因此,上下文菜单被取消。第二个例子没有这个问题,控制台不会干扰UI,所以contextmenu可以很好地显示。是的,我理解。我想知道为什么返回false不能阻止连接菜单。
$("#f").on("contextmenu", "div", function (e) {
    e.preventDefault();
});