oncontextmenu в FF и IE - помогите, туплю :)

Ashotovich

Новичок
oncontextmenu в FF и IE - помогите, туплю :)

Приветствую всех.

Помогите, пожалуйста, разобраться. Есть код:
PHP:
<html>
<body>
click or contextmenu
</body>
</html>

<script language="JavaScript" type="text/javascript">
<!--
document.onclick = function(event) {
	var evt = event || window.event;
	alert(evt.type);
}

document.oncontextmenu = function(event) {
	var evt = event || window.event;
	alert(evt.type);
	return false;
}
//-->
</script>
При левом или правом клике на любое место документа должен выводиться тип события - click или contextmenu. В IE все работает. А в FF при правом клике (contextmenu) сначала срабатывает click, а затем - contextmenu. Откуда FF этот click берет - ума не приложу.

Помогите разобраться, пожалуйста, что-то я туплю.

-~{}~ 02.09.08 15:40:

Да, FF последний - 3.0.1
 

dimagolov

Новичок
а в чем проблема? вот если бы хотел ловить, а событие не происходило, тогода была бы причина для печали, а так в чем проблема?
 

Ashotovich

Новичок
Проблема в том, что в FF при нажатии правой кнопки мыши, сначала срабатывает и левая, которую, собственно, не нажимали. :)
 

dimagolov

Новичок
Ashotovich, не тупи. onclick отрабатывается на любые кнопки, смотри свойства event чтобы понять какая именно была нажата
в FF по крайней мере так :)
 

Ashotovich

Новичок
Упс... А почему в IE тогда однозначно разделено - click=левая кнопка, contextmenu=правая кнопка? И как тогда из свойства event выдрать, какая кнопка была нажата кроме как по event.type?

-~{}~ 02.09.08 16:43:

Так. Вот, читаем (http://javascript.ru/start/events/click):
Заметим, что событие click для правой кнопки мыши генерируется только в Safari, который обрабатывает правую кнопку точно так же, как левую.
Только в Safari - значит, что в FF не так.

Неужто врут?

-~{}~ 02.09.08 16:52:

Все, разобрался.
Добавил в обработчик onclick условие:
PHP:
if (evt.button != 2)
Другое дело, что почему-то везде пишут, что в FF по правой кнопке мыши click не срабатывает, а только в Safari... Блин, никому верить нельзя. :)

-~{}~ 02.09.08 17:05:

И вообще все одной функцией на onmousedown обрабатываю теперь. :)

-~{}~ 02.09.08 17:06:

Спасибо, dimagolov!
 

dimagolov

Новичок
еще есть событие onmousedown и приколы с восприятием правой кнопки как 3-й или 2-й в разных броузерах. тут лучше не читать, а сделать тест и протестить на всех возможных броузерах и платформах.
 

Ashotovich

Новичок
Так и делаю. Щас еще одна непонятка вылезла - FF запоминает значения полей hidden после обновления страницы вручную (по F5). Блин. Чего он их не сбрасывает? :)

И это победимо - просто в конце страницы по JS обнуляю все принудительно. :)
 

Angerslave

Новичок
Ashotovich
Он значения вообще всех полей сохраняет по F5. Чтобы сбросил - надо Go нажимать.
 

dimagolov

Новичок
Angerslave, почитай мозиловскую доку, там полю можно принудительно сказать, что его сохранять при refresh не надо, как мне помниться
 

JOSS-PHP

Новичок
есть 4 события... onmouseup onmousedown onclick oncontextmenu....
теье нужно проверять какая кнопка нажата в событии onclick, а в остальных сделать "заглушку"



а вообще google рулит ;)
 

JOSS-PHP

Новичок
всё равно событие oncontextmenu не во всех браузерах есть... помоему в Опере нету

Вот сводная таблица по возможности отключения родной реакции браузера:
Левая кнопка Средняя кнопка Правая кнопка
Internet Explorer Да Да Да
Firefox Да Править конфиг Да
Safari Win Да Да Да
Opera Да Нет Нет
Konqueror Да Да Да
 

JOSS-PHP

Новичок
стоит всего лишь нормально его обрабатывать
В этом случае будет срабатывать два обработчика : oncontextmenu & onclick.... смысл ? лучше все события в onclick обрабатывать(он всегда срабатывает)... а на остальные "заглушки ставить",
тем более что кнопочка контекстного меню на клаве не даст этот эффект, так как oncontextmenu срабатывает от нажатия кнопки мыши.
 

kruglov

Новичок
onclick - когда нажали и отпустили. onmousedown - когда просто нажали.
 
Сверху