js阻止默认浏览器行为与冒泡行为的实现代码

在前端开发工作中,由于浏览器兼容性等问题,我们会经常用到“停止事件冒泡”和“阻止浏览器默认行为”。

1. 阻止浏览器的默认行为

function stopDefault(e) { //如果提供了事件对象,则这是一个非IE浏览器 if(e && e.preventDefault) {   //阻止默认浏览器动作(W3C)   e.preventDefault(); } else {   //IE中阻止函数器默认动作的方式   window.event.returnValue = false; } return false; }

2. 停止事件冒泡

function stopBubble(e) { //如果提供了事件对象,则这是一个非IE浏览器 if(e && e.stopPropagation) {   //因此它支持W3C的stopPropagation()方法   e.stopPropagation(); } else {   //否则,我们需要使用IE的方式来取消事件冒泡   window.event.cancelBubble = true; } return false; }

具体应用实例:写好的一个项目,今天交给用户使用,返回了一大堆问题,其中有一个很精典:

一个页面,有一个表单,用来提交表单的按钮是个button,用jquery来响应这个按钮的点击动作,通过post提交,供用户输入的是一个文本框,用户输入完要填的东西之后,直接按回车键,就相当于按了那个button,刚开始没注意这个问题,一按回车,就跳转到了另外一个页面,查了很多资料,才发现要阻止浏览器的默认行为,,因为SUBMIT的默认行为是提交表单,那么你的JS就不会执行了。所以先取消默认行为。然后执行你的JQ来提交。具体的我也说不清楚,只知道若文本框的type="submit",直接点击按钮的时候就会跳到另外一个页面,若type="button",则点击按钮的时候不会出现这样的情况,可按回车键的时候会跳到另外一个页面,解决方法,看下面代码:

<input type="text" onkeydown="enter_down(this.form, event);"/>

<script type="text/javascript"> function enter_down(form, event) { if(event.keyCode== "13") { stopDefault(event); submitForm(form,'actionDiv'); } } function stopDefault(e) { //如果提供了事件对象,则这是一个非IE浏览器 if(e && e.preventDefault) {   //阻止默认浏览器动作(W3C)   e.preventDefault(); } else {   //IE中阻止函数器默认动作的方式   window.event.returnValue = false; } return false; } </script>

通过上面的代码就可以实现按回车的时候相当于点击“提交”按钮。且上面的代码兼容IE、FF浏览器。

有时候遇到需要屏蔽浏览器的一些快捷键行为时,比如说:ff下按Backspace键,会跳到上一个浏览器的历史记录页面;

注意要在onkeydown事件中调用stopDefault(event)函数,在onkeyup事件中调用是不成功的。

<span><</span>a onclick<span>=</span><span>"toggleFriendFuncList(event, '6708062', 'he');"</span><span>></</span>a<span>></span>

由于href是空值,如果不阻止浏览器的默认行为,产生的效果就是刷新页面。

现在我们需要做的就是阻止href的链接事件,而去执行onclick事件。

老的处理方式:

<span><</span>a onclick<span>=</span><span>"toggleFriendFuncList(event, '6708062', 'he');"</span> href<span>=</span><span>"javascript:void(0);"</span><span>></</span>a<span>></span>

jquery的写法:

1)return false :In event handler ,prevents default behavior and event bubbing 。
return false 在事件的处理中,可以阻止默认事件和冒泡事件。

2)event.preventDefault():In event handler ,prevent default event (allows bubbling) 。
event.preventDefault()在事件的处理中,可以阻止默认事件但是允许冒泡事件的发生。

3)event.stopPropagation():In event handler ,prevent bubbling (allows default behavior).
event.stopPropagation()在事件的处理中,可以阻止冒泡但是允许默认事件的发生

prototype的写法:

Event.stop(event)
用法介绍:
事件发生后,浏览器通常首先触发事件发生元素上的事件处理程序,然后是它的父元素,父元素的父元素……依此类推,直到文档的根元素为止。这被称为 事件冒泡,是事件传播的最常见的方式。当处理好一个事件后,你可能想要停止事件的传播,不希望它继续冒泡。
当你的程序有机会处理事件时,如果这个事件具有 默认行为,同时浏览器也会处理它。例如,点击导航链接、将表单提交到服务器、在一个单行文本框中按下回车键等等。如果对这些事件你定义了自己的处理方式,可能会非常希望阻止相关的默认行为。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wzpfdz.html