2014-02-12 4 views
8

Я звоню e.stopPropagation() почти на каждое событие, которое у меня есть для моего текущего приложения. Есть ли способ просто прекратить распространение для каждого события без явного вызова метода в начале каждого тела функции?Остановка распространения для всех событий

+1

'stopPropagation()' является функцией для объекта Event. Его нельзя назвать глобально. – BenM

+0

stopPropagation() Предотвращает событие от пузырьков дерева DOM, предотвращая уведомление родительских обработчиков о событии. –

+0

Вот интересное сообщение о том, как динамически получать все поддерживаемые типы событий во время выполнения, поэтому вам не нужно вручную создавать список: http://stackoverflow.com/questions/5848598/jquery-how-can-i -bind-all-events-on-a-dom-element – Jasper

ответ

6

Нет, это не может быть объявлена ​​на глобальном

Метод event.stopPropagation() останавливает барботирование событие для родительских элементов, предотвращая любые обработчики событий из родительского выполняется.

Например, если есть ссылка с методом кликов, прикрепленная внутри DIV или FORM, которая также имеет прикрепленный метод кликов, это предотвратит запуск метода щелчка DIV или FORM.

http://api.jquery.com/event.stopPropagation/

-1

Попробуйте это. Требуется jQuery.

$('*').on('click', function(e){ 
    e.stopPropagation(); 
}); 
+0

@ Rakesh..it останавливает события только щелчком мыши о событиях мыши и событиях изменений? –

7

Вы могли бы бен все события (удалить один ты не нужен):

$('*').bind('blur change click dblclick error focus focusin focusout hover keydown keypress keyup load mousedown mouseenter mouseleave mousemove mouseout mouseover mouseup resize scroll select submit', function(event){ 
    event.stopPropagation(); 
}); 

Посмотрите на возможные события в jQuery Docs

0

Чтобы построить на ответ Алекс, в ванильном JS и еще несколько событий (все события клавиатуры и щелчка, которые я мог найти):

/** 
* Disable all user events on the page 
* 
* @returns {function()} a function to cancel the disabling 
*/ 
const disableAllUserEvents =() => { 
    const events = ["click", "contextmenu", "dblclick", "mousedown", "mouseenter", "mouseleave", "mousemove", 
     "mouseover", "mouseout", "mouseup", "keydown", "keypress", "keyup", "blur", "change", "focus", "focusin", 
     "focusout", "input", "invalid", "reset", "search", "select", "submit", "drag", "dragend", "dragenter", 
     "dragleave", "dragover", "dragstart", "drop", "copy", "cut", "paste", "mousewheel", "wheel", "touchcancel", 
     "touchend", "touchmove", "touchstart"]; 

    const handler = event => { 
     event.stopPropagation(); 
     event.preventDefault(); 

     return false; 
    }; 

    for (let i = 0, l = events.length; i < l; i++) { 
     document.addEventListener(events[i], handler, true); 
    } 

    return() => { 
     for (let i = 0, l = events.length; i < l; i++) { 
      document.removeEventListener(events[i], handler, true); 
     } 
    }; 
}; 

Редактировать: Просто знайте, что это не безопасное решение, так как эти события могут быть восстановлены и отменены: Use Chrome's webkit inspector to remove an event listener

Смежные вопросы