在页面上可以有多个事件,也可以多个元素响应同一件事,

事件冒泡引发的问题:

有些时候不想动用的事件,却因为事件冒泡而触发

解决问题:

1.事件对象

由于IE-DOM和标准的DOM实现事件对象的方法各不相同,导致在不同浏览器上获取事件对象变得比较困难,。针对这个问题,jq进行了必要的扩展和封装,从而使得在什么浏览器中都能够轻松地获取事件对象以及事件对象的一些属性。

在程序中,实现事件对象非常简单,只需要为函数添加一个参数,例:

$(element).bind('click',function(event){

  //event:事件对象

})

当单击element时,事件对象就被创建了,这个事件对象只有事件处理函数才能访问,事件处理函数执行完毕,事件对象就会被销毁。

2停止事件冒泡

停止事件冒泡可以阻止事件中其他对象的事件处理函数被执行。在jq中提供了stopPropagation()方法来停止事件冒泡。

3.阻止默认行为

网页中的元素有自己的默认行为,例如 单击超链接后会跳转,点击“提交”按钮后表单会提交,有时需要阻止元素的默认行为。

在jq中,提供了preventDefault()方法来阻止元素的默认行为。

例,在项目中,经常需要验证表单,在单击“提交”按钮时,验证表单内容,

例如,某元素是否是必填字段,某元素长度是否够6位,当表单不符合提交条件时,要阻止表单的默认行为,(表单提交);

$(function(){

  $(obj).bind("click",function(){

  var username=$("#username").val();//获取元素的值

  if(username=''){//判断值是否为空

    $('#el').html('<p>文本框值不能为空</p>');//提示信息

    event.preventDefault();//阻止默认行为(表单提交);

  }

})

})

如果想同时对事件对象停止冒泡和默认行为,可以在事件处理函数中返回false,这是对在事件对象上同时调用stopPropagation()和preventDefalut();

在表单的例子中,可以把

event.preventDefalut()//阻止默认行为

改写成

return  false;

也可以把事件冒泡例子中的

event.stopPropagation()//停止事件冒泡

改写成

return  false;

4.事件捕获

事件捕获和事件冒泡是两个相反的过程,事件捕获是从最顶端往下开始触发。

事件捕获并不是所有的主流浏览器都支持,并且这个缺陷无法通过javascript来修复,jq不支持事件捕获,如果需要用到事件捕获,只能用原生js;

jq的事件冒泡的更多相关文章

  1. 事件冒泡的应用——jq on的实现

    曾对jQuery中on的实现有所疑问,一直没有找到合适的实现方法,今日看<javascript高级程序设计>中的事件冒泡有了些思路. 针对于新增的DOM元素,JQ中若为其绑定事件就必须使用 ...

  2. jQuery---jQ动画(普通,滑动,淡入淡出,自定义动画,停止动画),jQuery的事件,jQ事件的绑定/解绑,一次性事件,事件委托,事件冒泡,文档加载

    jQuery---jQ动画(普通,滑动,淡入淡出,自定义动画,停止动画),jQuery的事件,jQ事件的绑定/解绑,一次性事件,事件委托,事件冒泡,文档加载 一丶jQuery动画 show,hide, ...

  3. jq事件冒泡问题

    在程序中使用事件对象非常简单,只需为函数添加一个参数,jquery代码如下: $("element").bind("click",function(event) ...

  4. jq 事件冒泡总结

    什么是JS事件冒泡? 在一个对象上触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事件处理程序或者事件返回true,那么这个 ...

  5. js 停止事件冒泡 阻止浏览器的默认行为(阻止超连接 # )

    在前端开发工作中,由于浏览器兼容性等问题,我们会经常用到“停止事件冒泡”和“阻止浏览器默认行为”. 1..停止事件冒泡 JavaScript代码 //如果提供了事件对象,则这是一个非IE浏览器if ( ...

  6. 事件冒泡、事件委托、jQuery元素节点操作、滚轮事件与函数节流

    一.事件冒泡定义 事件冒泡是指在一个对象触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事件处理程序或者事件返回true,那 ...

  7. jq常用事件(on,blur,focus,change),js/jq等待图片(页面)加载完毕事件,js读取文件

    jq常用事件(on,blur,focus,change) // 方法一(推荐) $('.box').on( "click",function() {} ) $('.box').on ...

  8. JS中的事件冒泡——总结

    一. 有话要说 事件冒泡这个话题已经被园子里的朋友说透了,已经没什么要讲的了,但是由于呢我这边有个小问题刚好跟这个事件冒泡有关,就突然性想写个总结:一方面是给自己增加印象,另一方面给园子的新手们,提供 ...

  9. JS中的事件、事件冒泡和事件捕获、事件委托

    https://www.cnblogs.com/diver-blogs/p/5649270.html https://www.cnblogs.com/Chen-XiaoJun/p/6210987.ht ...

随机推荐

  1. Error establishing socket解决办法

    jdbc配置语句为: jdbc:microsoft:sqlserver://server_name:1433 如运行程序时出现 "Error establishing socket" ...

  2. 执行 npm run update-webdriver 提示文件不能获取错误

    按照angularjs官网的入门教程中输入 npm run update-webdriver  总是提示 https://chromedriver.storage.googleapis.com/2.1 ...

  3. hive深入

    Hive QL: Create Table 创建一个指定名字的表.如果相同名字的表已经存在,则抛出异常:用户可以用 IF NOT EXIST 选项来忽略这个异常. EXTERNAL 关键字可以让用户创 ...

  4. memcached + php 扩展 for ubuntu

    1.安装memcached apt-get install memcached 2.安装php memcached 扩展 apt-get install php5-memcache 3.启动memca ...

  5. cmstop传递什么控制器和方法---就实例化该控制器

    object顶级类class object 第一级抽象类controllerabstract class controller extends object 第二级抽象类controller_abst ...

  6. 关于PHP静态方法调用和实例化类调用的区别

    1.首先来澄清一些观点 由于静态方法在内存中只有一份,无论你调用多少次,都是共用的,而且没有对象的概念,所以不能在静态方法里面使用$this调用,如果非得调用的话,只能实例化自身类 而实例化不一样,每 ...

  7. Qt使用中碰到的问题

    1.发现table第一列在切换后变黑,或多了行数. 一般是编译出来的.exe文件所使用的qt的dll不匹配造成的.一定要使用编译时,所使用的那个版本的qt的dll.

  8. DB9 公头母头引脚定义及连接、封装

    DB9 公头母头引脚定义及连接.封装 转自:http://blog.csdn.net/yangshuodianzi/article/details/8997478 1.实物及引脚简介 在做开发的时候经 ...

  9. org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named '__frch_lableId_0' in 'class com.cd.entity.Page'

    #号改为$即可

  10. Haproxy的安装和配置示例

    1.ha proxy简介ha proxy是一个开源的,高性能的,基于tcp第四层和http第七层应用的负载均衡软件优点:可靠性和稳定性非常好          最高可以同时维护40000-50000个 ...