我想仅在按下修改器时才使链接起作用

时间:2014-03-05 16:12:32

标签: javascript keystroke

我只是在按下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>

2 个答案:

答案 0 :(得分:0)

一些事情:

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

  2. 根据上述警告,您的基本方法是执行相同的条件,但只是取消事件行为,如果它是假的(因此他们没有按下两个键)。当它是真的时你不必做任何事情因为这是默认行为。

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

答案 1 :(得分:0)

  1. 为什么? (好奇)
  2. 您已使用A标记解雇了onclick。您也不能onclick来自您调用的onclick
  3. 为了引用e,您必须将其作为参数传递。
  4. 您不能将e作为参数传递,您想引用event
  5. 这有效

    <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

    HOWEVER ,在某些浏览器中,按SHIFT + click会在新的浏览器窗口中打开链接的网址。我无法想到一种防止这种情况的方法,因为它是一种浏览器设置,无法通过JavaScript控制。在这种情况下会发生的是当前窗口将转到“foo.htm”,但链接“#”将在新的浏览器窗口中打开。