2013-07-03 85 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