Как генерировать событие правой кнопкой мыши во всех браузерах
-
21-09-2019 - |
Вопрос
Небольшой контекст:
Приложение, над которым я работаю, имеет правое извлекло в контекстном меню для определенных объектов на экране. Текущий дизайн как каждый из этих объектов прослушивает, чтобы щелкнуть правой кнопкой мыши, отправляет запрос AJAX, чтобы получить контекстные данные для этого объекта, использует эти данные для создания PopuPmenU2 из Dojo 0.4.3 (я знаю!), А затем генерирует Щелкните правой кнопкой мыши, чтобы запустить меню Dojo.
Я пытаюсь выяснить способ создать правого щелчка события для всех браузеров. В настоящее время мы поддерживаем только IE и используем событие OnContextMenu.
Ограничения:
- Нет jQuery :(
- Я не могу предварительно загрузить все данные для объектов на экране, чтобы создать меню Dojo и избежать запроса AJAX.
Решение
Это должно заставить вас начать с создания события правого щелчка. Ключом к правой щелчке является параметр кнопки: кнопка = 2.
if (document.createEvent) {
var rightClick = document.createEvent('MouseEvents');
rightClick.initMouseEvent(
'click', // type
true, // canBubble
true, // cancelable
window, // view - set to the window object
1, // detail - # of mouse clicks
10, // screenX - the page X coordinate
10, // screenY - the page Y coordinate
10, // clientX - the window X coordinate
10, // clientY - the window Y coordinate
false, // ctrlKey
false, // altKey
false, // shiftKey
false, // metaKey
2, // button - 1 = left, 2 = right
null // relatedTarget
);
document.dispatchEvent(rightClick);
} else if (document.createEventObject) { // for IE
var rightClick = document.createEventObject();
rightClick.type = 'click';
rightClick.cancelBubble = true;
rightClick.detail = 1;
rightClick.screenX = 10;
rightClick.screenY = 10;
rightClick.clientX = 10;
rightClick.clientY = 10;
rightClick.ctrlKey = false;
rightClick.altKey = false;
rightClick.shiftKey = false;
rightClick.metaKey = false;
rightClick.button = 2;
document.fireEvent('onclick', rightClick);
}
Я бы предложил Google для «document.createevent» и «document.createeventObject» для более подробной информации об API с сайтов Mozilla и MSDN.
Надеюсь это поможет!