阻止冒泡。冒泡简单的举例来讲,儿子知道了一个秘密消息,它告诉了爸爸,爸爸知道了又告诉了爷爷,一级级传递从而引发事件的混乱,而阻止冒泡就是不让儿子告诉爸爸,爸爸天然不会告诉爷爷了。下面的domo就是很好的例子。javascript
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> #box { width: 300px; height: 300px; background: red; display: none; } </style> <script type="text/javascript"> window.onload = function() { var btn = document.getElementById('btn'); var box = document.getElementById('box'); btn.onclick = function(ev) { var oEvent = ev || event; box.style.display = 'block'; //oEvent.cancelBubble = true;//高版本浏览器 stopBubble(oEvent); //在低版本的chrome和firefox浏览器中须要兼容性处理 //高版本chrome和firefox浏览器直接使用上面这行代码便可 } document.onclick = function() { box.style.display = 'none'; } } //阻止冒泡事件的兼容性处理 function stopBubble(e) { if(e && e.stopPropagation) { //非IE e.stopPropagation(); } else { //IE window.event.cancelBubble = true; } } </script> </head> <body> <input type="button" id="btn" value="语言" /> <div id="box"></div> </body> </html>
若是我不阻止冒泡的话,那么首先btn会触发点击时间,让盒子显示,可是因为box是包含在document中的,因此会向上冒泡又触发document的点击事件,盒子又消失。这个事件的执行顺序能够在不一样的点击事件中使用alert来验证。关于cancelBubble的兼容性处理在高版本的chrome和firefox中已经不须要兼容处理了,直接使用oEvent.cancelBubble = true 便可。下面的阻止浏览器事件的兼容性处理在高版本浏览器中一样不须要。css
默认事件。即浏览器自己具有的功能。
html
function preventDefa(e){ if(window.event){ //IE中阻止函数器默认动做的方式 window.event.returnValue = false; } else{ //阻止默认浏览器动做(W3C) e.preventDefault(); } }这种是兼容性写法,可是若是你只须要支持高版本浏览器的话,那么如上文同样,一句话便可。
btn.onclick = function (){ return false; }