Webkit: контекстное меню / обход ошибок? - PullRequest
3 голосов
/ 08 декабря 2011

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

Вот проблема: если preventDefault() вызывается для события contextmenu из обработчика события contextmenu, браузеры ведут себя по-разному. Все браузеры правильно не отображают контекстное меню своего браузера по умолчанию. Однако в Chrome & Safari браузер отслеживает событие щелчка для элемента (и только если событие contextmenu отменяется).

Когда я отменяю событие contextmenu из обработчика contextmenu, я НЕ хочу, чтобы событие с последовательным щелчком срабатывало для того же элемента. Есть ли чистый способ решить эту проблему? Ни возвращение false в обработчике contextmenu, ни вызывающая функция 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);
    }

1 Ответ

1 голос
/ 09 декабря 2011

Используя какой-либо другой элемент, например span, вам не нужно беспокоиться о действии по умолчанию, поскольку по умолчанию щелчка не будет.Я нашел эти два плагина jquery, которые могут помочь вам:

http://abeautifulsite.net/blog/2008/09/jquery-context-menu-plugin/

http://beckelman.net/post/2008/11/04/Right-or-Left-Click-Context-Menu-Using-jQuery-Demo.aspx

...