0

クロムエクステンションを作成しているため、キーボード入力が一時的にWebページに到達しないことがあります(エクステンションのハンドラがキャッチしたキーボード入力で独自のタスクを実行する)。そして、その拡張はすべての入力を聞いて良い仕事をします。preventDefaultはAltモディファイアを使用するキーをブロックしません

しかし、一部のキーボード入力は引き続きウェブページを経由します。具体的には、Altキーを使用する特定のキーボード入力がWebページに到達します。私はこのコードで問題を複製しています

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

をあなたはこのjsfiddleのコードと対話することができますhttps://jsfiddle.net/Sophtware/5ucefew2/

は、誰かがこれが起こって、どのようにそれを修正することですなぜ私が把握助けることができますか?

EDIT#1:preventDefaultコールを介して来るシンボルは、アクセントや他の「結合文字」(「、」など)のようなものであることがわかりました。実際に、結合文字がタイプされると、次にタイプされる文字は常にブロックされません。

+0

は、コメントをインラインで参照してください。 –

答えて

2

まず、あなたはフィドルにjQueryをロードしていません。

第2に、可視文字を生成しないキーが押されたときにkeypressが起動しないため、keypressではなく​​イベントを使用する必要があります。これは、一部のキャラクターがそのキャラクターと共に動作し、他のキャラクターは動作しないことが分かった理由です。

第3に、イベントバインディングコードが実際に正しく書き込まれていません。 jQueryが1つの項目だけを含むラップされたセットを返すときは、get(0)を使う必要はありません。 windowまたはdocumentの1つしかないので、そのコードは必要ありません。

さらに、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あなたは間違っています。ここでコードスニペットを実行しましたか、自分のコードをプロジェクトにコピーしましたか?繰り返しますが、あなたのフィドルにはjQueryが含まれていなかったので、そのコードはまったく実行されていませんでした。私のコードは、ALTで始まるキーの組み合わせをブロックします。すべてのキーストロークを防ぐために質問を更新します。 –

+0

"Run code snippet"をクリックして入力ボックス + 'e'に入力し、アクセントが入力されました。 – Sophtware

関連する問題