前面的话

  在触发DOM上的某个事件时,会产生一个事件对象event,这个对象中包含着所有与事件有关的信息。所有浏览器都支持event对象,但支持方式不同。jQuery在遵循W3C规范的情况下,对事件对象的常用属性进行了封装,使得事件处理在各个浏览器下都可以正常运行而不需要进行浏览器类型判断,本文将详细介绍jQuery事件对象

获取

  对于DOM事件对象来说,标准浏览器和IE8-浏览器的事件对象获取方式不一致。标准浏览器的事件对象是事件处理程序中的第一个参数,而IE8-浏览器的事件对象是直接使用event变量

  jQuery采用了标准写法,并兼容低版本IE浏览器

<script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<div id="box" style="height:30px;width:200px;background:pink;"></div>
<script>
$('#box').click(function(event){
$(this).html(event.type);
})
</script>

事件类型

  事件有很多类型,事件对象中的type属性表示被触发的事件的类型

<script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<div id="box" style="height:30px;width:200px;background:pink;"></div>
<script>
$('#box').on('click mouseover mouseout',function(event){
$(this).html(event.type);
})
</script>

事件目标

  事件目标target属性返回事件当前所在的节点,即正在执行的监听函数所绑定的那个节点

<script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<ul id="box">
<li class="in">1</li>
<li class="in">2</li>
</ul>
<script>
$('#box').on('mousemove',function(event){
$(event.target).css('background-color','lightblue');
})
$('#box').on('mouseout',function(event){
$(event.target).css('background-color','transparent');
})
</script>

当前元素

  currentTarget属性始终指向事件绑定的当前DOM元素,与this值始终相等

<script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<ul id="box">
<li class="in">1</li>
<li class="in">2</li>
</ul>
<script>
$('#box').on('mousemove',function(event){
$(event.currentTarget).css('background-color','lightblue');
})
$('#box').on('mouseout',function(event){
$(event.currentTarget).css('background-color','transparent');
})
</script>

事件冒泡

  DOM事件流分为三个阶段:事件捕获、处于目标和事件冒泡,由于IE8-浏览器不支持事件捕获。jQuery也不支持事件捕获

stopPropagation()

  jQuery采用标准写法stopPropagation()来实现阻止事件冒泡

<script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<button id="btn1">按钮</button>
<button id="btn2">阻止冒泡</button>
<script>
$('#btn1').on('click',function(){
alert(1);
});
$(document).on('click',function(){
alert(0);
});
$('#btn2').on('click',function(event){
event.stopPropagation();
$('#btn1').on('click',function(event){
event.stopPropagation();
});
});
</script>

isPropagationStopped()

  event.isPropagationStopped()方法用来检测事件对象中是否调用过event.stopPropagation()

<script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<div id="box" style="height: 30px;background:lightblue"></div>
<script>
$('#box').click(function(event){
alert(event.isPropagationStopped());//false
event.stopPropagation();
alert(event.isPropagationStopped());//true
});
</script>

stopImmediatePropagation()

  stopImmediatePropagation()方法不仅可以取消事件的进一步冒泡,而且可以阻止同一个事件的其他监听函数被调用

<script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<button id="btn1">按钮一</button>
<button id="btn2">按钮二</button>
<script>
$('#btn1').on('click',function(event){
event.stopImmediatePropagation();
alert(1);
});
$('#btn1').on('click',function(){
alert(2);
});
$('#btn2').on('click',function(event){
alert(1);
event.stopPropagation();
});
$('#btn2').on('click',function(){
alert(2);
});
$(document).on('click',function(){
alert(0);
});
</script>

isImmediatePropagationStopped()

  isImmediatePropagationStopped()方法用来检测事件对象中是否调用过stopImmediatePropagation()

<script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<div id="box" style="height: 30px;background:lightblue"></div>
<script>
$('#box').click(function(event){
alert(event.isImmediatePropagationStopped());//false
event.stopImmediatePropagation();
alert(event.isImmediatePropagationStopped());//true
});
</script>

默认行为

  jQuery使用event.preventDefault()方法来阻止默认行为

<script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<div id="box" style="height: 30px;background:lightblue"></div>
<script>
$('#box').contextmenu(function(event){
event.preventDefault();
});
</script>

isDefaultPrevented()

  event.isDefaultPrevented()方法可以用来检测当前事件是否阻止默认行为

<script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<div id="box" style="height: 30px;background:lightblue"></div>
<script>
$('#box').contextmenu(function(event){
alert(event.isDefaultPrevented());//false
event.preventDefault();
alert(event.isDefaultPrevented());//true
});
</script>

命名空间

  event.namespace属性返回事件的命名空间

<script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<div id="box" style="height: 30px;background:lightblue"></div>
<script>
$('#box').bind('test.abc',function(event){
alert(event.namespace);//abc
});
$('#box').click(function(){
$('#box').trigger('test.abc');
})
</script>

返回值

  event.result是事件被触发的一个事件处理程序的最后返回值

  [注意]当使用return false时,既可以阻止冒泡,也可以阻止默认行为

<script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<div id="box" style="height: 30px;background:lightblue"></div>
<script>
$('#box').click(function(event){
return 123;
});
$('#box').click(function(event){
$('#box').html(event.result);
})
</script>

键值

  鼠标事件中需要判断左键、右键还是滚轮。键盘事件中需要判断按下键盘的哪个按键

  jQuery使用事件对象event.whitch属性来确定鼠标事件和键盘事件键值

<script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<button id="box" style="height: 30px;width: 50px;background:lightblue">按钮</button>
<script>
$('#box').on('keydown mousedown',function(event){
$(this).html(event.which);
});
</script>

深入学习jQuery事件对象的更多相关文章

  1. JavaScript 中的window.event代表的是事件的状态,jquery事件对象属性,jquery中如何使用event.target

    http://wenda.haosou.com/q/1373868839069215 http://kylines.iteye.com/blog/1660236 http://www.cnblogs. ...

  2. 知识笔记:jQuery 事件对象属性小结

    使用事件自然少不了事件对象.因为不同浏览器之间事件对象的获取,以及事件对象的属性都有差异,导致我们很难跨浏览器使用事件对象.jQuery中统一了事件对象,当绑定事件处理函数时,会将jQuery格式化后 ...

  3. jquery 事件对象属性小结

    使用事件自然少不了事件对象. 因为不同浏览器之间事件对象的获取, 以及事件对象的属性都有差异, 导致我们很难跨浏览器使用事件对象. jQuery中统一了事件对象, 当绑定事件处理函数时, 会将jQue ...

  4. 深入学习jQuery事件绑定

    × 目录 [1]bind [2]trigger [3]delegate[4]on[5]one 前面的话 javascript有HTML.DOM0级.DOM2级和IE这四种事件处理程序,而jQuery对 ...

  5. jQuery事件对象event的属性和方法

    事件处理(事件对象.目标元素的获取,事件对象的属性.方法等)在不同浏览器之间存在差异,jQuery在遵循W3C规范的情况下做了封装统一 一.事件对象常用的属性: event.type:获取事件的类型, ...

  6. jQuery事件对象的属性

    注:摘自<锋利的jQuery(第二版)> JQuery在遵循W3C规范的情况下,对事件对象的常用属性进行了封装,使得事件处理在各大浏览器下都可以正常运行而不需要进行浏览器类型判断. 1. ...

  7. jQuery 事件对象的属性

    jQuery 在遵循 W3C 规范的情况下,对事件对象的常用属性进行了封装,使得事件处理在各大浏览器下都可以正常运行而不需要进行浏览器类型判断. (1) event.type 该方法的作用是可以获取到 ...

  8. jquery 事件对象笔记

    jQuery元素操作 设置或获取元素固有属性   获取               prop(属性名)    修改               prop(属性名,值) 获取自定义属性          ...

  9. jQuery事件对象

    1.event.currentTarget 事件的监听者2.event.target 事件的目标3.event.delegateTarget 绑定了当前正在调用jQuery事件处理器的(当前事件的委托 ...

随机推荐

  1. 由overflow-x:scroll产生的收获

    我们都知道float:left属性会让元素向左浮动,如果用一个div将几个左浮动的li包起来,是不是div的宽度被li撑得很长很长呢,代码: <!DOCTYPE html> <htm ...

  2. JavaScript读书笔记(一)

    自动类型转换 在JavaScript中,使用 == .=== 和 - 等运算符能够使得类型自动转换. 关于不同类型的值的比较 flase == 0; //true "" == fl ...

  3. 在linux中设置静态ip地址

    在linux中设置静态ip地址1.在终端中输入:vi /etc/sysconfig/network-scripts/ifcfg-eth0 2.开始编辑,填写ip地址.子网掩码.网关.DNS等[root ...

  4. centos7 时间设置

    安装完成centos7后,虽然时区选择的是上海,但是最终的时间还是不对,因为没有开启自动同步NTP功能,所以需要自动手动设置. 首先输入timedatectl命令,查看当前机器的时间: Local t ...

  5. 通过NFS(nfsroot)启动linux系统

    Mounting the root filesystem via NFS (nfsroot) 英文原文位于inux内核源代码中的"Documentation/filesystems/nfs/ ...

  6. 把C#程序(含多个Dll)合并成一个Exe的超简单方法

    开发程序的时候经常会引用一些第三方的DLL,然后编译生成的exe文件就不能脱离这些DLL独立运行了. 但是,很多时候我们本想开发一款只需要一个exe就能完美运行的小工具.那该怎么办呢? 下文介绍一种超 ...

  7. slf4j的简单介绍

    SLF4J,Simple Logging Facade for JAVA,是一个十分简单的的日志facade,对于不同的日志框架做了一个封装. 对比common logging,Common logg ...

  8. 字符串、数组方法实战--charAt(),split(),indexOf(),substring()

    这篇随笔根据两个面试题来实战一下数组.字符串的一些方法. 题一:一个字符串中找出出现次数最多的字符次数 var str = 'fuuhuhuhufaihuhfnkjNKCNIO';
 function ...

  9. [LintCode] Find Peak Element 求数组的峰值

    There is an integer array which has the following features: The numbers in adjacent positions are di ...

  10. JavaScript鼠标经过图片的放大镜效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...