【问题标题】:I want to make a link work only when modifiers are pressed我只想在按下修饰符时使链接起作用
【发布时间】:2014-03-05 16:12:31
【问题描述】:

我试图使我的链接仅在按下 Ctrl+Shift 时才起作用,否则我希望它什么也不做。我似乎无法让它工作。有什么想法吗?

<html> 
<head> 
<script type="text/javascript">
function keycheck(){
if (e.ctrlKey && e.shiftKey) {;          
    document.getElementById("hello").onclick = function() {
    location.href='http://www.mylink.com/';
    }
}
else {;
document.getElementById("hello").onclick = function() {
   location.href='#';
        }
    }
}
</script> 
</head> 
<body> 
<a href="#" onClick="keycheck()" id="hello">HELLO</a>
</body> 
</html>

【问题讨论】:

  • 您是否已经加载了任何可以帮助您的框架或库,或者您正在使用纯 JS?例如,jQuery 事件api.jquery.com/category/events/event-object 具有 shiftKey 属性。
  • 这永远不会起作用,您正在检查鼠标事件中的关键事件。你也试过打开你的控制台窗口吗?
  • @DieterGoetelen 这是可能的。处理程序在 onClick 处理程序中检查的文档上的每个 keydown、keyup 事件上更新 isShfitKeyDown 标志。

标签: javascript keystroke


【解决方案1】:

几件事:

  1. 如果不使用诸如 jQuery 之类的库,您将会从直接的 onClick 处理程序中获得不一致的结果。尤其是在访问事件对象时。如果您有意避免使用此类库,请务必多研究处理事件。

  2. 根据上述警告,您的基本方法是执行与您相同的条件,但如果事件行为为假则简单地取消事件行为(因此他们没有同时按下两个键)。当它为真时,您无需执行任何操作,因为无论如何这都是默认行为。

事件处理和取消是库被证明非常有用的领域之一,因此您可以使用一个并绑定一个on()click() 处理程序来获得更简单和更好的结果,您可以从中获取 event.preventDefault();

【讨论】:

    【解决方案2】:
    1. 为什么? (好奇)
    2. 您已经使用 A 标签解雇了onclick。你也不能通过你调用的函数onclickonclick
    3. 要引用e,您必须将其作为参数传入。
    4. 您不能将e 作为参数传入,您想引用event

    这行得通

    <script type="text/javascript">
    function foo() {
        console.log(event.ctrlKey);
        console.log(event.shiftKey);
    }
    </script>
    
    <a href="#" onclick="foo()">Foo

    在控制台中,如果您在单击链接时按下了其中任何一个键,您将看到 truefalse

    为了让这个链接在它们都被按下时转到一个特定的 URL:

    <script type="text/javascript">
    function foo() {
        if ( event.ctrlKey && event.shiftKey) {
            window.location.href="foo.htm";
        }
    }
    </script>
    
    <a href="#" onclick="foo()">Foo

    但是,在某些浏览器中,按SHIFT + click 会在新的浏览器窗口中打开链接的 URL。我想不出办法来阻止这种情况,因为它是浏览器设置,无法由 JavaScript 控制。在这种情况下会发生的是当前窗口将前进到“foo.htm”,但链接“#”将在新的浏览器窗口中打开。

    【讨论】:

    • 谢谢!效果很好。我只是将 onClick 放在 div 而不是链接上。我正在尝试重新创建这个link 不过还有一个问题,“ctrlKey”是否会转换为 Mac 上的 CMD 键?因为我的朋友在他的 Mac 上发誓它不工作,虽然它是给我的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-06
    • 2018-03-04
    • 2012-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多