Я пытаюсь работать с контекстным меню и обработчиками кликов на якорном элементе в кросс-браузерном режиме, и это оказывается очень сложно.
Вот проблема: если preventDefault()
вызывается для события contextmenu из обработчика событий contextmenu, браузеры ведут себя по-разному. Все браузеры правильно не отображают контекстное меню своего браузера по умолчанию. Однако в Chrome и Safari браузер следует за событием click для элемента (и только в том случае, если событие contextmenu отменено).
Когда я отменяю событие контекстного меню из обработчика контекстного меню, я НЕ хочу, чтобы последовательное событие щелчка запускалось для одного и того же элемента. Есть ли чистый способ решить эту проблему? Ни возврат false в обработчике контекстного меню, ни вызов функции stopPropagation не устраняют проблему!
Вот демо со странным сбоем (используйте инспектор Webkit или Firebug, чтобы увидеть трассировку)
Вот один ответ: используйте jQuery, а не POJ для очистки ширины/высоты:
function Cancel_Next_Click()
{
// Compatibility - Chrome & Safari bug where context click event is followed by an undesired click event
var Cancel_Next_Click_Element = document.createElement("div");
Cancel_Next_Click_Element.style.position = "fixed";
Cancel_Next_Click_Element.style.left = "0px";
Cancel_Next_Click_Element.style.top = "0px";
Cancel_Next_Click_Element.style.width = window.innerWidth;
Cancel_Next_Click_Element.style.height =window.innerHeight;
document.body.appendChild(Cancel_Next_Click_Element);
var Cancel_Next_Click_Element_Listener = function() {
document.body.removeChild(Cancel_Next_Click_Element);
document.removeEventListener('mouseup', Cancel_Next_Click_Element_Listener, false);
}
document.addEventListener('mouseup', Cancel_Next_Click_Element_Listener, false);
}
a
, для выполнения этого - person Eonasdan   schedule 09.12.2011