键码问题 - 几乎可以与 ctrlKey 一起使用

Keycode issues - works almost with ctrlKey

我写了一个 JavaScript 当我点击 link.

时打开 "content" div 中的一个特定页面

HTML:

<li><a href='#' onclick="load_shift_test()">Soft Drinks</a></li>

JS:

function load_shift_test(){
    document.getElementById("content").innerHTML='<object type="text/php" data="mineralwater.php" ></object>';

这行得通,但是,如果在单击 link 时按下某个键,我需要它在 2 个页面之间进行选择,所以我这样重写了脚本:

function load_shift_test(){
    document.getElementById("content").innerHTML='<object type="text/php" data="mineralwater.php" ></object>';
 if (event.ctrlKey) 
    document.getElementById("content").innerHTML='<object type="text/php" data="mineralwateredit.php"></object>';

}

这也有效,但它也会在 Chrome 中打开一个新标签,我真的不喜欢它。

如果按下 "e" 键(不用 ctrl),我希望页面能打开。我该怎么做?

这里的问题是 Chrome 在触发任何 JS 事件之前将 Ctrl+click 覆盖为新的 window 快捷方式。如果您希望 "e" 成为修饰键,请创建一个 jQuery 事件来跟踪键位置的状态。

window.keyDown = false; //Start with key down is false
$(document).keyup(function(event) { //On key up switch to false
  window.keyDown = (event.keyCode == 69) ? false : window.keyDown; 
} ).keydown(function(event) { //On key down switch to true
  window.keyDown = (event.keyCode == 69) ? true : window.keyDown; 
} );

然后您可以通过检查全局变量window.keyDownload_shift_test()中采取行动。

当用户在任何 hyperlink 上执行 ctrl + click 时,正常的浏览器行为是在新选项卡中打开此 hyperlink。 JavaScript 代码无法阻止此行为。

但是,如果您想停止打开新标签页,则需要从锚点 link 中删除 href 属性,或者只使用另一个 HTML 元素(例如 div, 跨度).

这里是JsFiddle Demo.