event.data 获取额外数据,可以是数字、字符串、数组、对象
事件处理(事件对象、目标元素的获取,事件对象的属性、方法等)在不同浏览器之间存在差异,jQuery在遵循W3C规范的情况下做了封装统一
什么是事件对象?
事件对象是在事件触发的时候生成的,包含了事件触发的一些信息,是无法人为的创建的,并且只能在函数的内部访问到,事件执行完毕,事件对象销毁。
如何拿到当前事件的事件对象?
直接在事件的函数内部就可以访问到,函数内部的这个e,就是事件对象event.
$("#btn").click(function(e){
console.log(e.type);
});
事件对象有什么属性?
对其中几个属性说明:
event.type 属性获取触发事件名
$('input').click(function (e) {
alert(e.type);
});
event.data 获取额外数据,可以是数字、字符串、数组、对象
$('input').bind('click', 123, function () { //传递 data 数据
alert(e.data); //获取数字数据123
});
注意:如果字符串就传递:'123'、如果是数组就传递:[123,'abc'],如果是对象就传递:{user : 'Lee', age : 100}。数组的调用方式是:e.data[1],对象的调用方式是:e.data.user。
event.target获取当前事件绑定的dom元素
$("#btn").click(function(ev){
alert(ev.target);
});
注意
1. event.target和this的区别,因为js中存在冒泡,所以this是会变化的,当时event.target永远是事件绑定的元素.
2. event.target 和this都是dom对象,可以转为jquery对象$(event.target)和$(this)
3. event.currentTarget得到是的监听元素的dom相当于this
事件对象常用的方法
event.stopPropagation()阻止事件冒泡
什么是事件冒泡?
如果页面中层叠了多个元素,并且这多个元素绑定的是同一个事件,就会出现事件冒泡的问题
<div>
<input type="button" value = "点击">
</div>
//三个不同元素触发事件
$('input').click(function () {
alert('按钮被触发了!');
});
$('div').click(function () {
alert('div 层被触发了!');
});
$(document).click(function () {
alert('文档页面被触发了!');
});
冒泡的现象:
点击文档的时候,只会触发文档的click事件,点击div的时候,触发文档和div的click事件,点击button的时候,触发文档,div,button的click事件,是一层一层向上传递的。
希望点击button,不会触发到上层同样的click事件,就可以使用event.stopPropagation()方法,取消上层的冒泡事件
$('input').click(function (e) {
alert('按钮被触发了!');
e.stopPropagation();
});
event.preventDefault()阻止默认行为
比如,想要阻止a标签点击,触发href跳转。
$('a').click(function (e) {
e.preventDefault();
});
阻止form表单提交
$('form').submit(function (e) {
e.preventDefault();
});