学习要点:
1.绑定事件
2.简写事件
3.复合事件
javaScript有一个非常重要的功能,就是事件驱动。当页面完全加载后,用户通过鼠标或键盘触发页面中绑定事件的元素即可触发。jquery为开发者更有效率的编写事件行为,封装了大量有益的事件方法供我们使用。
一、绑定事件
在javaScript课程的学习中,我们掌握了很多使用的事件,常用的事件click,dbclick,mousedown,mouseup,mousemove,mouseover,mouseout,change,select,submit,keydown,keypress,keyup,blur,focus,load,resize,scroll,error。那么,还有更多的事件可以参考手册中的事件部分。
jquery通过.bind()方法来为元素绑定这些事件。可以传递三个参数:bind(type,[date],fn),type表示一个或多个类型的事件的事件名字符串;[data]是可选的,作为event.data属性值传递一个额外的数据,这个数据是一个字符串、一个数字、一个数组或一个对象;fn表示绑定到指定元素的处理函数。
//使用点击事件
$("input").bind("click",function(){ //点击按钮后执行匿名函数
alert("点击");
});
//普通处理函数
//mouseleave穿出
$("div").mouseleave(function(){ //移出整个div区域触发一次
$("strong").html(function(index,value){
return value+"1";
});
});
keydown(),keyup()返回的是键码,而keypress()返回的是字符编码
$("input").keydown(function(e){
alert("e.keyCode"); //按下a返回65
});
$("input").keypress(function(e){
alert("e.charCode"); //按下a返回97
});
注意:e.keyCode和e.charCode在两种事件互换也会产生不同的效果,除了字符还要一些字符键的区别。更多详情可以了解JavaScript事件处理那章。
focus()和blur()分别表示光标激活和丢失,事件触发时机是当前元素。而focusin()和foucusout()也表示光标激活和丢失,但事件触发的时机可以是子元素。
//html部分
<div style="width:200px;height:200px;background:red;">
<input type="text" value=""/>
</div>
<strong></strong>
//focus光标激活
$("input").focus(function(){ //当前元素触发
$("strong").html("123");
});
$("div").focus(function(){ //绑定的是div元素,子类input触发
$("strong").html("123");
});
注意:blur()和focusout()表示光标丢失,和激活类似,一个必须当前元素触发,一个可以是子元素触发。
三、复合事件
jquery提供了许多最常用的事件效果,组合一些功能实现了一些复合事件,比如切换功能、智能加载等
ready(fn):当DOM加载完毕触发事件
hover([fn1,]fn2):当鼠标移入触发第一个fn1,移出触发fn2
toggle(fn1,fn2[,f3.....]):已废弃,当鼠标点击触发fn1,再点击触发fn2
//背景移入移出切换效果
$("div").hover(function(){
$(this).css("background","black"); //mouseenter效果
},function(){
$(this).css("background","red"); //mouseleave效果,可省
}
});
注意:.hover()方法是结合了.mouseenter()和mouseleave()方法,并非.mouseover()和mouseout()方法。
toggle()这个方法比较特殊,这个方法有两层含义,第一层含义就是已经被1.8版本废用、1.9版删除掉的用法,也就是点击切换复合事件的用法。第二层函数将会在动画那章讲解到。既然废弃掉了,就不应该使用。被删除的原因是:以减少混乱和提高潜在的模块化程度。
但你又非常想用这个方法,并且不想自己编写类似的功能,可以下载jquery-migrate.js文件,来向下兼容已被删除掉的方法。
//背景点击切换效果(1.9版删除掉了)
$("div").toggle(function(){ //第一次点击切换
$(this).css("background","black");
},function(){ //第二次点击切换
$(this).css("background","blue");
},function(){ //第二次点击切换
$(this).css("background","red");
});
注意:由于官方已经删除掉这个方法,所以也不是推荐使用的,如果在不基于向下兼容的插件JS。我们可以自己实现这个功能。
var flag=1; //计数器
$("div").click(function(){
if(flag==1){ //第一次点击切换
$(this).css("background","black");
flag=2;
}else if(flag==2){ //第二次点击切换
$(this).css("background","blue");
flag=3;
}else if(flag==3){ //第二次点击切换
$(this).css("background","red");
flag=1;
}
});