2016-04-01 4 views
0

На этой веб-странице есть простой прослушиватель событий, когда я нажимаю правой кнопкой мыши, он блокирует открытие контекстного меню. достаточно просто.Первый щелчок игнорируется после загрузки страницы

Но когда я обновляю страницу или при начальной загрузке страницы, если я начинаю с правой щелчком мыши по странице, она отображает контекстное меню, а затем блокирует ее, когда я нажимаю правой кнопкой мыши после этого. Я попробовал его в 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. mouseright set upper than eventListener. – KoIIIeY

+0

ваш первый щелчок стреляет перед загрузкой страницы, я думаю, поэтому вам не стоит ждать, пока страница загружена. – KoIIIeY

+2

'mouseright()' вызывается при первом щелчке, но событие 'contextmenu' уже запущено (это как' mouseright() 'был вызван). Перезапись 'oncontextmenu' не изменит выполнение * current *, но изменит выполнение * next *. –

ответ

1

Вы излишне назначая событие дважды (и как window.contextmenu и document.oncontextmenu). Удаление дополнительной обертки, кажется, работает:

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

(. window.onload может также быть ненужными, в зависимости от того, где вы размещаете addEventListener в документе)