2013-07-03 52 views
1

大家。 我使用像onkeyup和onkeydown函数的事件。在这一点上,我试图用JavaScript禁用printscr。我用Google搜索键的ASCII码是18,Printscr是44.JavaScript中的Onkeyup事件不起作用?

这是我试图禁用的代码。

document.onkeyup = function(e) 
      { 
       if (e.which === 44) 
       { 
        alert('alt key pressed'); 
        return false; 
       } 

      }; 
var isAlt = false; 
document.onkeydown = function(e) 
      { 
       if (e.which === 18) { 
        isAlt === true; 
        if (((e.which === 44)) && isAlt === true) 
        { 
         alert('tested printscreen'); 
         return false; 
        } 
       } 
      }; 

在这个键控警报正在工作,但返回false不会触发。也为alt + printscr没有得到警报。我该做什么是我犯的错误。

感谢, 玉萍

+0

我想在文档的onkeyup“假”是不是有用(文件确实是在事件的链的末端)。此外,只有在页面中有焦点元素(例如任何输入标签,例如画布,...)时,该事件才会被播放,如果没有播放任何内容,则没有事件会到达“文档”元素。 – Ricola3D

+0

感谢您的回应,那么我该如何使该打印屏幕返回false; –

回答

1

看看浏览器特定的文档以停止事件:

e.stopPropagation() 

此外,在关键时,文本框可能已经填充了键重复多个字符。在关键时刻,您需要存储该值。在密钥中,如果您获得44密钥,则恢复该值。而且,您需要将关键处理程序放在窗口上,而不是文档中。

(function() { 

var savedValue; 

window.onkeyup = function(e) { 
    if (e.altKey && e.which === 44) { 
     alert('alt key pressed'); 

     if (undefined !== savedValue) { 
      e.target.value = savedValue; 
      savedValue = undefined; 
     } 
     return; 
    } 
}; 

window.onkeydown = function(e) { 
    if (undefined === savedValue) { 
     savedValue = e.target.value; 
    } 

    if (e.altKey && e.which === 44) { 
     alert("tested printscr"); 
    } 
}; 

})(); 
+0

感谢克雷格,我试过你的代码仍然没有得到任何警报你可以提供给我这个jsfiddle我可以知道我犯了什么错误 –

+0

你在按下打印屏幕时是否按下ALT键?另外,通过删除altKey检查,可能值得检查你是否获得了该密钥。如果你仍然没有看到任何东西,我猜测浏览器不会将printscr按键传播到DOM。 – Craig