Задать вопрос
aleksand44
@aleksand44

Почему одно событие перекрывает другое?

Нужно сделать функционал как у рабочего стола Windows.
Есть одно меню, которое всплывает по правому клику мыши, на oncontextmenu. По клику левой кнопки мыши, оно должно исчезать. Вот с этим то и проблемы. Основная область экрана - это подобие рабочего стола, которое в jquery указано как selectable() . Т.е. по клику в любом другом месте - меню действительно исчезает, но на рабочем столе по клику появляется рамка выделения и клик не проходит. Клик назначаю через addEventListener

ВОт примерный код:
$(document).ready(function(){
    $('#window').selectable();
});

document.oncontextmenu = function(event){
    var target = event.target;
    var menu = document.getElementById('contextMenu');
    menu.style.display = 'block';
    menu.style.top = event.pageY + 'px';
    menu.style.left = event.pageX + 'px';
    return false;
}

document.addEventListener('click', function(e){
    var target = e.target;
    document.getElementById('contextMenu').style.display = 'none';
});
  • Вопрос задан
  • 497 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
@dmitryKovalskiy
программист средней руки
Может дело в коде, который создает рамку выделения? Тем более вы вызываете обработчик события, при этом никак не контролируете "всплытие пузырька", соответственно любые события,возникающие при данном действии так же отрабатывают. Если говорить о вашей задаче - мне кажется тут вы не совсем точно ее решаете. Мне кажется тут больше подходит идея о клике вне элемента - вот пример
Ответ написан
В коде плагина где-то используется event.stopPropagation, потому ваш обработчик и игнорируется. Вы можете передать в addEventListener третьим аргументом true. Тогда он выполниться раньше события плагина. Но ваш код всё-равно будет работать неверно потому, что он скрывает меню при клике куда угодно, даже на само меню. И вам надо обработать эту ситуацию (здесь немного про другое, но код применим для этой задачи).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы