这篇文章主要为大家详细介绍了 js 阻止冒泡和默认事件,即默认行为, 具有一定的参考价值,感兴趣的小伙伴们可以参考一下
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
阻止冒泡。冒泡简单的举例来说,儿子知道了一个秘密消息,它告诉了爸爸,爸爸知道了又告诉了爷爷,一级级传递从而引起事件的混乱,而阻止冒泡就是不让儿子告诉爸爸,爸爸自然不会告诉爷爷了。下面的 domo 就是很好的例子。
- <!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 显示,而点击其他地方则让 box 消失。 如果我不阻止冒泡的话,那么首先 btn 会触发点击时间,让盒子显示,但是由于 box 是包含在 document 中的,所以会向上冒泡又触发 document 的点击事件,盒子又消失。这个事件的执行顺序可以在不同的点击事件中使用 alert 来验证。关于 cancelBubble 的兼容性处理在高版本的 chrome 和 firefox 中已经不需要兼容处理了,直接使用 oEvent.cancelBubble = true 即可。下面的阻止浏览器事件的兼容性处理在高版本浏览器中同样不需要。
默认事件。即浏览器本身具备的功能。
- function preventDefa(e){
- if(window.event){
- //IE中阻止函数器默认动作的方式
- window.event.returnValue = false;
- }
- else{
- //阻止默认浏览器动作(W3C)
- e.preventDefault();
- }
- }
这种是兼容性写法,但是如果你只需要支持高版本浏览器的话,那么如上文一样,一句话即可。
- btn.onclick = function (){
- return false;
- }
来源: http://www.phperz.com/article/17/0528/331038.html