2014-02-12 106 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

看看可能发生的事件要建立在Alex的响应,在香草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