2017-07-18 26 views
0

我正在做一個chrome擴展,偶爾會阻止所有鍵盤輸入臨時到達網頁(因爲擴展的處理程序使用它捕獲的鍵盤輸入執行自己的任務)。這個擴展功能在聽取所有這些輸入信息方面做得很好。preventDefault沒有阻止使用Alt修飾符的鍵

然而,一些鍵盤輸入仍然通過網頁!具體來說,某些使用Alt修飾鍵的鍵盤輸入會到達網頁。我複製了這個代碼的問題:https://jsfiddle.net/Sophtware/5ucefew2/

有人可以幫助我弄清楚爲什麼發生這種情況,以及如何解決它:

$(window).get(0).addEventListener("keypress", 
    function(e){ 
     e.stopPropagation(); 
     e.preventDefault(); 
}, true); 

您可以在此的jsfiddle代碼交互?編輯#1:我發現來自preventDefault調用的符號是類似重音符號或其他「組合字符」(如',,¨)的符號。實際上,一旦輸入組合字符,輸入的下一個字符將始終無法被阻止。

+0

見我的回答如下爲你有幾個問題和工作的例子。 –

回答

2

那麼,首先,你沒有在你的小提琴中加載jQuery。

其次,您需要使用​​事件,而不是keypress,因爲keypress在按下不產生可見字符的按鍵時不會觸發。這就是爲什麼你發現一些角色與它一起工作,而另一些角色則沒有。

第三,您的事件綁定代碼沒有被正確寫入。當jQuery返回僅包含一個項目的包裝集合時,不需要使用get(0)。而且由於只有一個windowdocument,所以不需要該代碼。

此外,您可以明確檢查被按下的ALT鍵。

最後,請不要將您的代碼發佈到第三方網站,因爲這些鏈接可能隨着時間的推移而中斷。而是在這裏發佈你的代碼片段。

看評論在線:

// Set the event on the document, but then test for the input element when it happens 
 
$(document).on("keydown", "input[type='text']", \t function(e){ 
 
    // Check the event for the ALT key press 
 
    console.log("Keystroke cancelled!"); 
 
    e.preventDefault(); 
 
    e.stopPropagation(); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<h3> 
 
Type in Alt + 'e', Alt + 'i', or other Alt combinations! They get typed in even though they're not supposed to! 
 
</h3> 
 
<p> 
 
Strangely, Alt+j and Alt+k cannot be written more than once in a row and act strange in general. 
 

 
If you type in Alt + e and then a regular letter key press, the letter gets typed! ?????? 
 
</p> 
 
<input type="text">

+0

我運行了你的代碼,它比我的代碼更少的鍵盤事件。它不會阻止Alt +'e'組合或任何其他Alt組合。它也不會阻止常規按鍵。再次,我試圖讓代碼阻止所有鍵盤輸入。我的問題是,我的代碼只阻止MOST鍵盤輸入。 – Sophtware

+0

@Sophtware你錯了。您是否在此處運行了我的代碼片段,或者是否將我的代碼複製到了您的項目中?同樣,你的Fiddle沒有包含jQuery,所以沒有任何代碼運行。我的代碼會阻止任何以ALT開頭的組合鍵。我將更新問題以防止所有按鍵。 –

+0

我點擊了「Run code snippet」,然後輸入到輸入框 +'e'中,輸入口音。 – Sophtware

相關問題