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
 
а в чем проблема? вот если бы хотел ловить, а событие не происходило, тогода была бы причина для печали, а так в чем проблема?
 
Проблема в том, что в FF при нажатии правой кнопки мыши, сначала срабатывает и левая, которую, собственно, не нажимали. :)
 
Ashotovich, не тупи. onclick отрабатывается на любые кнопки, смотри свойства event чтобы понять какая именно была нажата
в FF по крайней мере так :)
 
Упс... А почему в 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!
 
еще есть событие onmousedown и приколы с восприятием правой кнопки как 3-й или 2-й в разных броузерах. тут лучше не читать, а сделать тест и протестить на всех возможных броузерах и платформах.
 
Так и делаю. Щас еще одна непонятка вылезла - FF запоминает значения полей hidden после обновления страницы вручную (по F5). Блин. Чего он их не сбрасывает? :)

И это победимо - просто в конце страницы по JS обнуляю все принудительно. :)
 
Ashotovich
Он значения вообще всех полей сохраняет по F5. Чтобы сбросил - надо Go нажимать.
 
Angerslave, почитай мозиловскую доку, там полю можно принудительно сказать, что его сохранять при refresh не надо, как мне помниться
 
есть 4 события... onmouseup onmousedown onclick oncontextmenu....
теье нужно проверять какая кнопка нажата в событии onclick, а в остальных сделать "заглушку"



а вообще google рулит ;)
 
всё равно событие oncontextmenu не во всех браузерах есть... помоему в Опере нету

Вот сводная таблица по возможности отключения родной реакции браузера:
Левая кнопка Средняя кнопка Правая кнопка
Internet Explorer Да Да Да
Firefox Да Править конфиг Да
Safari Win Да Да Да
Opera Да Нет Нет
Konqueror Да Да Да
 
стоит всего лишь нормально его обрабатывать
В этом случае будет срабатывать два обработчика : oncontextmenu & onclick.... смысл ? лучше все события в onclick обрабатывать(он всегда срабатывает)... а на остальные "заглушки ставить",
тем более что кнопочка контекстного меню на клаве не даст этот эффект, так как oncontextmenu срабатывает от нажатия кнопки мыши.
 
onclick - когда нажали и отпустили. onmousedown - когда просто нажали.
 
Сверху