事件绑定
我们一般使用的是bind()方法
bind()方法有3个参数:
第一个参数是事件类型,包括 blur、focus、load、resize、scroll、unload、click、dblick、
mousedown、mouseup、mousemove、mouseover、mouseout、mouseenter、mouseleave、change、
select、submit、keydown、keypress、keyup、和error等,当然也可以是自定义名称。
第二个参数为可选参数,作为event.data属性值传递给事件对象的额外数据对象。
第三个参数则是用来绑定的函数处理。
合成事件
jQuery有两个合成事件——hover()方法,类似前面讲过的ready()方法,hover()方法和toggle()方法都属于jQuery自定义的方法。
hover()方法
hover()方法的语法结构为: hover(enter,leave);
hover()方法用于模拟光标悬停事件。当光标移动到元素上时,会触发指定的第1个函数(enter);
当光标移出这个元素时,会触发指定的第2个函数(leave)。
示例:
$(function () {
$("#pane1 h5.head").hover(function () {
$(this).next().show();
}.function(){
$(this).next().hide();
});
});
toggle()方法
toggle()方法的语法结构为: toggle(fn1,fn2,…fnN);
toggle()方法用于模拟鼠标连续单击事件。第1次单击元素,触发指定的第1个函数(fn1);当再次单击同一元素时,则触发指定的第2个函数(fn2);如果有更多函数,则依次触发,直到最后一个。随后的每次单击都重复对这几个函数的轮番调用。
事件冒泡
什么是事件冒泡呢?
在页面上可以有多个事件,也可以多个元素响应同一个事件。假设网页上有两个元素,其中一个元素嵌套在另一个元素里,并且都被绑定了click事件,同时<body>元素上也绑定了click事件。
例如:
$(function () {
//为span元素绑定click事件
$('span').bind("click".function(){
var txt = $('#msg').html(txt);
});
//为div元素绑定click事件
$('#content').bind("click".function(){
var txt = $('#msg').html()+"<p>外层div元素被单击<p/>";
$('#msg').html(txt);
});
//为body元素绑定click事件
$("body").bind("click".function(){
var txt = $('#msg').html()+"<p>body元素被单击.<p/>";
$('#msg').html(txt);
});
})
</script>
</head>
<body>
<div id="countent">
外层div元素
<span>内层span元素</span>
外层div元素
</div>
<div id="msg"></div>
事件冒泡引发的问题
事件冒泡可能会引起预料之外的效果。上例中,本来只想触发<span>元素的click事件,然而<div>元素和<body>元素的click事件也同时被触发了。因此,有必要对事件的作用范围进行限制。
移除事件
在绑定事件的过程中,不仅可以为同一个元素绑定多个事件,也可以为多个元素绑定同一个事件。
unbind(type [,data]) //data是要移除的函数
$('#btn').unbind("click"); //移除click
$('#btn').unbind(); //移除所有
对于只需要触发一次的,随后就要立即解除绑定的情况,用one()
$('#btn').one("click",function(){.......});
模拟操作
可以用trigger()方法完成模拟操作。
$('#btn').trigger("click");
$('#btn').click();
触发自定义事件
$('#btn').bind("myclick",function(){....});
$('#btn').trigger("myclick");
传递数据
trigger(type [,data])
$('#btn').bind("myclick",function(event,message1,message2){...........});
$('#btn').trigger("myclick",["传给message1","传给message2"]);
执行默认操作
$("input").trigger("focus");
//不仅会触发input元素绑定的focus事件,还会触发默认操作——得到焦点。
$("input").triggerHandler("focus");
//只触发绑定事件,不执行浏览器默认操作
其他用法
绑定多个事件类型
$("div").bind("mouseover mouseout",function(){.....});
添加事件命名空间
$("div").bind("click.plugin",function(){......});
在所绑定的世界类型后面添加命名空间,这样在删除事件时只需要指定命名空间即可。
$("div").unbind(".plugin"); //删除空间内的事件
$("div").trigger("click!"); //触发所以不包含在命名空间中的click方法
如果包含在命名空间的也要触发:
$("div").trigger("click");