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

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

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

2.停止事件冒泡

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

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

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

jsp代码:

<input type="text" name="appGrpName_s" id="appGrpName_s" οnkeydοwn="enter_down(this.form, event);"/>  

js代码:

01.<script type="text/javascript">
02.    function enter_down(form, event) {
03.      if(event.keyCode== "13") {
04.          stopDefault(event);
05.          submitForm(form,'actionDiv');
06.      }
07.    }
08.
09.    function stopDefault(e) {
10.        //如果提供了事件对象,则这是一个非IE浏览器
11.        if(e && e.preventDefault) {
12.          //阻止默认浏览器动作(W3C)
13.          e.preventDefault();
14.        } else {
15.          //IE中阻止函数器默认动作的方式
16.          window.event.returnValue = false;
17.        }
18.        return false;
19.    }
20.</script>

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

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

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

<span style="color: rgb(51, 153, 51);"><</span>a onclick<span style="color: rgb(51, 153, 51);">=</span><span style="color: rgb(51, 102, 204);">"toggleFriendFuncList(event, '6708062', 'he');"</span><span style="color: rgb(51, 153, 51);">></</span>a<span style="color: rgb(51, 153, 51);">></span>  

由于href是空值,如果不阻止浏览器的默认行为,产生的效果就是刷新页面。
现在我们需要做的就是阻止href的链接事件,而去执行onclick事件。
老的处理方式:

<span style="color: rgb(51, 153, 51);"><</span>a onclick<span style="color: rgb(51, 153, 51);">=</span><span style="color: rgb(51, 102, 204);">"toggleFriendFuncList(event, '6708062', 'he');"</span> href<span style="color: rgb(51, 153, 51);">=</span><span style="color: rgb(51, 102, 204);">"javascript:void(0);"</span><span style="color: rgb(51, 153, 51);">></</span>a<span style="color: rgb(51, 153, 51);">></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)
用法介绍:
事件发生后,浏览器通常首先触发事件发生元素上的事件处理程序,然后是它的父元素,父元素的父元素……依此类推, 直到文档的根元素为止。这被称为 事件冒泡,是事件传播的最常见的方式。当处理好一个事件后, 你可能想要停止事件的传播,不希望它继续冒泡。
当你的程序有机会处理事件时,如果这个事件具有 默认行为,同时浏览器也会处理它。例如,点击导航链接、 将表单提交到服务器、在一个单行文本框中按下回车键等等。如果对这些事件你定义了自己的处理方式, 可能会非常希望阻止相关的默认行为。

但是,有时候还是不能解决相应的问题,明明已经调用了阻止浏览器默认行为的方法,可在按回车的时候还是会调用默认行为,最终也没有找到问题所在,只好把回车键禁用了,实际上是用Tab键代替回车键。代码如下:

01.<script language="javascript" event="onkeydown" for="document">
02.  //若为回车键
03.  if ( event.keyCode == 13 ) {
04.    //改成Tab键,这样每次按回车都起到了Tab的功效,光标跳到下一个对象
05.    event.keyCode = 9;
06.   }
07.</script>
08.
09.<script language="javascript" type="text/javascript">
10.  //禁用Enter键表单自动提交
11.      document.onkeydown = function(event) {
12.          var target, code, tag;
13.        if (!event) {
14.            event = window.event; //针对ie浏览器
15.            target = event.srcElement;
16.            code = event.keyCode;
17.            if (code == 13) {
18.                 tag = target.tagName;
19.                 if (tag == "TEXTAREA") { return true; }
20.                 else { return false; }
21.             }
22.         }
23.         else {
24.             target = event.target; //针对遵循w3c标准的浏览器,如Firefox
25.             code = event.keyCode;
26.            if (code == 13) {
27.                 tag = target.tagName;
28.                 if (tag == "INPUT") { return false; }
29.                 else { return true; }
30.            }
31.       }
32.     };
33.</script>

具体用法试例:

01.<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
02.<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
03.<%@ include file="/pages/common/global.jsp"%>
04.<html>
05.<head>
06.    <title>高德软件</title>
07.    <meta http-equiv="pragma" content="no-cache">
08.    <meta http-equiv="cache-control" content="no-cache">
09.    <meta http-equiv="expires" content="0">
10.    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
11.<script>
12.    function gotoPage(currentPage,form) {
13.        goto_Page(currentPage,form,"actionDiv");
14.    }
15.    function addAppGrp(){
16.        $("#actionDiv").load("${contextPath }/pages/manage/business/add.jsp");
17.        $("#chance_search_div").hide();
18.    }
19.    function modifyAppGrp(idName){
20.        var id=encodeURIComponent(idName);
21.        var url = contextName + "/appGrpAction.do?method=addAppGrp&appGrpName="+id;
22.        retrieveURL(url,'actionDiv');
23.        $("#chance_search_div").hide();
24.    }
25.    function savebusiness(thisForm){
26.        var name = $("#appGrpName").val();
27.        if(name.trim()==""){
28.            alert("分组名称不能为空。");
29.            return;
30.        }
31.        submitForm(thisForm,null,afterSave);
32.        return ;
33.    }
34.    function afterSave(content){
35.        if(content!=null&&content!=""){
36.            var arr = content.split(",");
37.            if(arr[0]=="true"){
38.                $("#chance_search_div").show();
39.                //当前结点
40.                var itemId = "0::" + $("#appGrpName").val();
41.                //父结点,因为只有添加根应用分组时才会执行这个方法,所以父结点统一为-1
42.                var parentId = -1;
43.                //当前结点显示名称
44.                var itemText = $("#appGrpName").val();
45.                //添加新结点
46.                tree.insertNewChild(parentId, itemId, itemText, doOnClick, 'myfolderClosed.gif' ,'myfolderOpen.gif','myfolderClosed.gif');
47.                retrieveURL("${contextPath}/appGrpAction.do?method=appGrpList","actionDiv");
48.                return;
49.            }
50.            alert(arr[1]);
51.            return;
52.        }
53.        alert("保存失败");
54.        return;
55.    }
56.    function deleteBusiness(thisForm,idName){
57.        if(confirm("确认要删除么?")){
58.            var id=encodeURIComponent(idName);
59.            retrieveURL("${contextPath}/appGrpAction.do?method=deleteAppGrp&appGrpName=" + id,null,null,function(content){
60.                if(content!=null&&content!=""){
61.                    var arr = content.split(",");
62.                    if(arr.length==3&&arr[2]=='y'){
63.                        var msg = "该应用组下有应用,要强制删除么?";
64.                        if(confirm(msg)){
65.                            retrieveURL("${contextPath}/appGrpAction.do?method=forceDelAppGrp&appGrpName="+id,null,null,afterForceDel);
66.                        }
67.                        return;
68.                    }
69.                    if(arr.length==2){
70.                        if(arr[0]=="true"){
71.                            //当前结点
72.                            itemId = "0::" + idName;
73.                            tree.deleteItem(itemId);
74.                            retrieveURL("${contextPath}/appGrpAction.do?method=appGrpList","actionDiv");
75.                            return;
76.                        }
77.                        alert(arr[1]);
78.                    }
79.                    return;
80.                }
81.                alert("删除失败");
82.                return;
83.            });
84.            return ;
85.        }
86.    }
87.    function afterForceDel(){
88.        if(content!=null&&content!=""){
89.            var arr = content.split(",");
90.            if(arr[0]=="true"){
91.                monitorTree();
92.                retrieveURL("${contextPath}/appGrpAction.do?method=appGrpList","actionDiv");
93.                return;
94.            }
95.            alert(arr[1]);
96.            return;
97.        }
98.        alert("保存失败");
99.        return;
100.    }
101.
102.
103.    function enter_down(form, event) {
104.      if(event.keyCode== "13") {
105.          stopDefault(event);
106.          submitForm(form,'actionDiv');
107.      }
108.    }
109.
110.    function stopDefault(e) {
111.        //如果提供了事件对象,则这是一个非IE浏览器
112.        if(e && e.preventDefault) {
113.          //阻止默认浏览器动作(W3C)
114.          e.preventDefault();
115.        } else {
116.          //IE中阻止函数器默认动作的方式
117.          window.event.returnValue = false;
118.        }
119.        return false;
120.    }
121.</script>
122.</head>
123.<body>
124.    <table style="width: 100%; align: center;">
125.        <tr>
126.            <td style="text-align:left;">
127.                <div id="chance_search_div">
128.                <html:form action="appGrpAction.do?method=appGrpList">
129.                <table class="form_t">
130.                    <tr>
131.                        <th class="tablelogo">    查询
132.                            <input type="hidden" name="hidden_s" value="1" />
133.                        </th>
134.                    </tr>
135.                    <tr>
136.                        <td style="text-align: left; padding-left: 50px;">
137.                            <br />
138.                            名称
139.                            <input type="text" name="appGrpName_s" id="appGrpName_s"
140.                                        οnblur="javascript:isSpecialChar(this);" οnkeydοwn="enter_down(this.form, event);"/>
141.
142.                            <input type="button" class="button4C" value="查 询"
143.                                            οnclick="javascript:submitForm(this.form,'actionDiv');" />
144.                            <input type="button" value="添  加" class="button4C" οnclick="javascript:addAppGrp();"/>
145.
146.                            <br />
147.                        </td>
148.                    </tr>
149.                 </table>
150.                </html:form>
151.
152.                </div>
153.                <div id="actionDiv"></div>
154.            </td>
155.        </tr>
156.    </table>
157.    <script><!--
158.        $("#actionDiv").load("${contextPath }/appGrpAction.do?method=appGrpList&random=" + Math.random());
159.    --></script>
160.</body>
161.</html>

转载地址:http://blog.csdn.net/shanliangliuxing/article/details/7091886

js阻止浏览器的默认行为以及停止事件冒泡(用JQuery实现回车提交,兼容IE、FF浏览器)相关推荐

  1. js 停止事件冒泡 阻止浏览器的默认行为

    在前端开发工作中,由于浏览器兼容性等问题,我们会经常用到"停止事件冒泡"和"阻止浏览器默认行为". 浏览器默认行为: 在form中按回车键就会提交表单:单击鼠标 ...

  2. javascript 停止事件冒泡以及阻止默认事件冒泡

    停止事件冒泡 function stopBubble(e) {// 如果提供了事件对象,则这是一个非IE浏览器if ( e && e.stopPropagation ) {// 因此它 ...

  3. html禁止页面左右滑动,js阻止移动端默认事件以及只阻止横向滚动事件方法

    js阻止移动端默认事件,是在相关的touch事件的时候利用event.preventDefault();来阻止默认滚动行为,但是如果要实现阻止横向滚动行为而不阻止竖向滚动行为就要写一个方法通过手指滑动 ...

  4. js /jquery停止事件冒泡和阻止浏览器默认事件

    var el = window.document.getElementById("a");el.onclick = function (e) {//如果提供了事件对象,则这是一个非 ...

  5. jquery 停止事件冒泡方法

    2种方法: View Code <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "ht ...

  6. js阻止a标签默认事件的几种方法

    方法/步骤 疑问 打开编辑器,新建html并加入a标签,如图所示,小编想点击a标签时执行pop函数同时禁止a标签的默认的href跳转,该如何阻止呢? 方法一 要阻止a标签跳转,可以改变href的值,直 ...

  7. html带提示的行号编辑框,文本框中显示行号[兼容IE/FF浏览器}

    在文本框中显示行号,兼容浏览器ie.ff .b1{height:20px;border:1px solid #7f9db9;line-height:20px; padding:0} input.btn ...

  8. js阻止浏览器默认事件

    1.阻止浏览器的默认行为 function stopDefault(e) { //如果提供了事件对象,则这是一个非IE浏览器 if(e && e.preventDefault) { / ...

  9. javascript阻止事件冒泡和浏览器的默认行为

    http://www.aspxhome.com/javascript/skills/200712/262128.htm 就是说用Div框住flash  Div的鼠标事件不传递给Body 文中说的方法记 ...

  10. java冒泡函数解释,JS DOM操作 函数 事件 阻止事件冒泡

    一 函数 1.字符串函数 s.tolowerCase( ):    -- 变小写 s.toupperCase( ):   -- 变大写 s.substr( 2 , 8 ):     -- 截取     ...

最新文章

  1. 阿里开源台柱 Ant Design 源码仓库被删了...
  2. debain apt oracle jdk,debian安装oracle jdk
  3. 从零开始单排学设计模式「简单工厂设计模式」黑铁 III
  4. AOP切入同类调用方法不起作用,AopContext.currentProxy()帮你解决这个坑
  5. 如何在家搭建oracle,oracle基本操作,自己亲手做过了
  6. python分类器鸢尾花怎么写_机器学习之路: python k近邻分类器 鸢尾花分类预测
  7. MATLAB系统辨识工具箱学习,详细教程!
  8. 第01课:敏捷教练和 ScrumMaster 基本功四部曲(iPad 版)
  9. Java黑皮书编程练习题6.08(摄氏度和华氏度之间的转换)
  10. android 状态栏高度多少像素,Android之获取屏幕的尺寸像素及获取状态栏标题栏高度...
  11. [Irving] SQL 2005/SQL 2008 备份数据库并自动删除N天前备份的脚本
  12. Android M 差分包的制作流程
  13. 更干净的PC电源,还能净化空气,艾湃电竞AP-550Ti电源上手
  14. 彭佳慧 - 走在红毯那一天
  15. ESP8266使用AT指令获取时间和心知天气
  16. NLP-文本向量化:Word Embedding 一般步骤【字符串->分词->词汇序列化->词汇向量化】
  17. Java----映射 map
  18. 两台W7系统的电脑,A电脑可以ping通B电脑,B电脑ping不通A电脑。
  19. python文件处理练习14
  20. 【2012Esri中国用户大会讲座】ArcGIS 10.1 for Server 安全机制(4)访问内容限制

热门文章

  1. AutoDL云GPU安装opencv-python报错解决方法
  2. react小白进阶之路
  3. 数据结构的定义(Data Structure)
  4. 一个免费好用的PDF转Markdown网站
  5. c语言STUP 200,M2里面出现Unable to write to C:\MirServer\Mir200\!Setup.txt
  6. 科学家研发出DNA计算机:未来程序员拿试管“写”代码?
  7. 山科大oj--编写函数:各位数字之和 (Append Code)
  8. 如何成为一个优秀SEO内容原创作者
  9. 装修怎么快速除甲醛 房间装修除装修异味方法
  10. 什么是配置文件 java_Java 中什么是配置文件