2016-04-01 12 views
0

このWebページには、コンテキストメニューを開くブロックを右クリックすると、単純なイベントリスナーがあります。十分に単純です。最初のクリックはページの読み込み後無視されます

しかし、ページをリフレッシュするときや、ページの最初の読み込み時に、ページを右クリックして開始するとコンテキストメニューが表示され、そのあとマウスの右ボタンをクリックするとブロックされます。 Chrome、FireFox、IEで試しました。同じ結果。

マウスダウン、キーダウン、またはタッチイベントなどで同じことが発生します。これは最初のクリックが無視されるようなものです。 JavaScriptソリューション(jqueryではなく)を探しています。私は何が欠けていますか?

<html> 
<head> 
<title>test</title> 
<script type="text/javascript"> 
window.onload = function() { 
    window.addEventListener("contextmenu", mouseright); 
} 
function mouseright() { 
    document.oncontextmenu = function(e) { 
     var e = e || window.event; 
     alert("right"); 
     e.preventDefault(); 
    } 
} 
</script> 
</head> 
<body> 
hello world 
</body> 
</html> 

私も(この記事keydown not detected until window is clickedのように)イベントリスナーの前にこれを追加しようとしたが、document.onloadで運がなかったし、それはページの負荷設定で可能なブラウザの焦点になることができることを見ました。私がJavaScriptで試したことのない考えや考え方はありますか?

if (document.hasFocus() == true) { 
    } else { 
    window.focus(); 
    } 
+0

window.onloadを削除します。 イベントリストより上位のマウスの位置を設定します。 – KoIIIeY

+0

ページがロードされている間に最初のクリックが呼び出される前に、最初のクリックが発生すると思います。 – KoIIIeY

+2

'mouseright()'は最初のクリックで呼び出されますが、 'contextmenu'イベントは既に発生しています'が呼ばれた)。 'oncontextmenu'を上書きすると、現在の*実行は変更されませんが、* next *の実行が変更されます。 –

答えて

1

あなたは不必要に二回(window.contextmenudocument.oncontextmenu両方など)イベントを割り当てています。余分なラッパーを削除すると動作するようです:

window.onload = function() { 
    window.addEventListener("contextmenu", mouseright); 
} 
function mouseright(e) { 
    var e = e || window.event; 
    alert("right"); 
    e.preventDefault(); 
} 

window.onloadはまた、あなたが文書でaddEventListenerを置く場所に応じて、不要かもしれません。)

関連する問題