Можно ли определить, есть ли конкретное событие DOM любой обработчик события, связанный с ним (включая обработку событий браузера по умолчанию) - в пределы Greasemonkey кода Фирефокса (EcmaScript 5.1 strict mode)?Обнаружение по умолчанию обработки событий
До сих пор мне удалось отменить обработку события щелчка при выборе текста, но я хотел бы, чтобы отменить обработку моего события во всех следующих ситуациях где нажмите событие инициирует действие по умолчанию:
- ыбор текст на странице отображается
- контекстного меню (т.е. правая кнопка мыши)
- ссылки следует (левая кнопкой мыши на
<a>
) - элементы формы манипулируют (текст получает окно фокус и курсор начнет мигать, выбрана кнопка радио, ...)
- какой-то другой код JavaScript, который обрабатывает событие (например, Появится всплывающее диалоговое окно справки)
Есть всеобъемлющая все механизм для этого или мне нужно по буквам все ситуации, в моем коде явно?
После кода, как я обнаруживаю, что выбор случился:
var toggleHighlight = function(){
var oldTargt;
return function(e){
targt = e.target;
sel = window.getSelection();
if (!sel.isCollapsed && sel.containsNode(targt, true)) {
return;
}
...
oldTargt = targt;
}()
document.addEventListener('click', toggleHighlight);
Примечание:
- Я не хочу, чтобы остановить распространение с моим сценарием, я хочу, чтобы остановить мой сценарий, если событие будет распространяются на другой обработчик.
- Меня не интересуют решения JQuery-event-handlers-only, если они не поймают обработчики событий браузера по умолчанию.
- Если эта функция действительно не существует, процитируйте некоторые статьи или блоги, а не только свое мнение.
- Особые предложения приветствуются, но меня интересует главным образом существование общего решения.
Update: приемлемые решения включают в себя:
- исчерпывающий (МОГЛИ) перечень
if
условий, которые мне нужно, чтобы проверить - без яваскрипта пути доступного из плагина Firefox
- объяснения как Firefox знает, что щелчок на действительном элементе
<a>
должен инициировать перезагрузку нового URL +, как эта логика недоступна из javascript/plugins.
Нет, нет никакого подвоха-все-событий решения. Я могу только подумать о том, чтобы подключиться к «документу» и проверить, не было ли по умолчанию запрещено определенные события (и это даже не будет работать, если распространение остановлено) – Bergi
@Bergi в моем случае это нормально, если распространение было остановлено, я хочу выполнить мой обрабатывать события только в случае, если в браузере ничего не происходит, как будто что-то с этим делать – Aprillion
Затем просто добавьте ['if (! e.defaultPrevented)'] (https://developer.mozilla.org/en-US/docs/DOM /event.defaultPrevented) в функцию 'toggleHighlight'. – Bergi