学习内容
jQuery各种事件
jQuery事件绑定
能力目标
能熟练使用jQuery各种事件
能熟练绑定jQuery事件
本章简介
JavaScript是事件驱动型的编程语言,即JavaScript和HTML之间的交互是通过用户和浏览器操作页面时触发的事件来驱动进行的。使用传统的JavaScript就能处理这些交互,但是jQuery增加并扩展了JavaScript事件处理机制,使其使用起来更加优雅和灵活。本章我们重点讲解jQuery中的各种事件以及事件的绑定。
核心技能部分
5.1 jQuery事件jQuery事件是使用面向对象的思想对JavaScript事件做了进一步封装,使用起来更加优雅和灵活,各种事件及其作用如表5-1-1所示。
表5-1-1 jQuery事件
jQuery事件
说明
ready( fn )
页面加载完毕时发生的事件
blur( [ [data] , fn ] )
元素失去焦点时发生的事件
change( [ [data] , fn ] )
元素的值发生改变时发生的事件
click( [ [data] , fn ] )
单击鼠标时发生的事件
dblclick( [ [data] , fn ] )
双击鼠标时发生的事件
focus( [ [data] , fn ] )
元素获得焦点是发生的事件
keydown( [ [data] , fn ] )
按下键盘时发生的事件
keyup( [ [data] , fn ] )
松开键盘时发生的事件
keypress( [ [data] , fn ] )
按下并松开键盘时发生的事件
mousedown( [ [data] , fn ] )
按下鼠标按钮时发生的事件
mousemove( [ [data] , fn ] )
鼠标移动时发生的事件
mouseout( [ [data] , fn ] )
鼠标离开某元素时发生的事件
mouseover( [ [data] , fn ] )
鼠标悬浮到某元素上时发生的事件
mouseup( [ [data] , fn ] )
松开鼠标按钮时发生的事件
scroll( [ [data] , fn ] )
页面滚动时发生的事件
select( [ [data] , fn ] )
input元素的选取事件
submit( [ [data] , fn ] )
表单提交事件
unload( [ [data] , fn ] )
页面卸载时发生的事件
参数fn表示事件发生时要绑定的匿名函数,参数data表示要传入到匿名函数的值。
5.1.1 页面载入\卸载事件(document).ready()是jQuery事件机制中最重要、最基础的一个事件,它用来代替传统DOM中的window.onload事件。(document).ready()能极大提高Web应用程序的响应速度。
1.执行时机
(document).ready()和window.onload虽然很相似,但是它们在执行时机方面是有区别的。window.onload是在网页中所有的元素(包括相关联的文件)完全加载到浏览器后才触发;(document).ready()是在页面的DOM结构加载完毕就触发,并不是等着网页中所有的元素(包括相关联的文件)完全加载到浏览器后才触发。
$(document).ready()的具体语法如下所示:
$(document).ready(
function()
{
//代码
}
)
下面我们通过一个示例来演示$(document).ready()的用法,参考代码如下所示。
示例5.1
代码语言:javascript复制
2.多次使用
如果我们要在页面加载完毕时执行两个函数,通常会像示例5.2这样写,代码如下所示。
示例5.2
代码语言:javascript复制
我们发现只有test2函数执行了,这是因为DOM事件一次只能绑定一个函数。如果进行多次绑定,那么后面的绑定会覆盖前面的绑定。其实这个问题很好解决,我们看下面的代码。
示例5.3
代码语言:javascript复制
虽然示例5.3把问题解决了,但是在某些情况下仍然不能满足需求,例如,如果脚本代码分布在多个外部js文件中,而每个js文件都需要使用onload事件,这种情况下使用示例5.3的方法会很难处理。jQuery中的ready()事件则可以很好的处理这个问题,每次给ready()事件绑定函数都会进行追加,而不是覆盖,例如下面的代码。
示例5.4
代码语言:javascript复制
3.简写形式
由于ready()事件使用频繁,jQuery提供了一种简写方式。下面我们使用简写方式重新实现示例5.5,代码如下所示。
示例5.5
代码语言:javascript复制通过示例5.5可以看到,(document).ready( )的简写方式是( )。
4.页面卸载事件unload
当用户关闭某个页面时,浏览器会卸载此页面,此时发生的就是unload事件。示例5.6演示在该事件发生时弹出一个对话框。
示例5.6
代码语言:javascript复制
当用户关闭某个页面时,浏览器会卸载此页面,此时发生的就是unload事件。
5.1.2 鼠标相关事件jQuery中跟鼠标相关的事件有5个,详见表5-1-2所示。
表5-1-2 jQuery鼠标事件
鼠标事件
说明
mousedown( [ [data] , fn ] )
按下鼠标按钮时发生的事件
mousemove( [ [data] , fn ] )
鼠标移动时发生的事件
mouseout( [ [data] , fn ] )
鼠标离开某元素时发生的事件
mouseover( [ [data] , fn ] )
鼠标悬浮到某元素上时发生的事件
mouseup( [ [data] , fn ] )
松开鼠标按钮时发生的事件
下面我们通过一些示例来演示jQuery中鼠标相关事件的用法,先看示例5.7,该示例演示了mousedown、mouseup和mousemove事件,代码如下所示。
示例5.7
代码语言:javascript复制
上述代码的运行效果如图5.1.5 所示。当按下鼠标左键时记录鼠标位置作为起始位置;当鼠标移动时一直记录鼠标的当前位置;当松开鼠标左键时记录鼠标位置作为结束位置。参数 e 是传递过来的事件对象,相当于 DOM 中的 event 对象, jQuery 对该对象进行了进一步封装, pageX 和 pageY 用了获取事件发生的位置, jQuery 事件对象会在下面进行详细介绍。
WEB入门之十四 jQuery事件_java_05图5.1.5 运行效果
5.1.3 键盘相关事件jQuery中跟键盘相关的事件有3个,详见表5-1-3所示。
表5-1-3 jQuery键盘事件
jQuery键盘事件
说明
keydown( [ [data] , fn ] )
按下键盘时发生的事件
keyup( [ [data] , fn ] )
松开键盘时发生的事件
keypress( [ [data] , fn ] )
跟keydown差不多,也是按下键盘时发生的事件
jQuery中的键盘事件跟DOM中的差不多,示例5.8是keypress事件的具体用法,参考代码如下所示。
示例5.8
代码语言:javascript复制
WEB入门之十四 jQuery事件_java_065.1.4 焦点相关事件jQuery中跟焦点相关的事件有2个,跟DOM中的焦点事件差不多,详见表5-1-4所示。
表5-1-4 焦点相关事件
焦点相关事件
说明
blur( [ [data] , fn ] )
元素失去焦点时发生的事件
focus( [ [data] , fn ] )
元素获得焦点时发生的事件
下面我们通过一个示例来演示jQuery中焦点事件的用法,参考代码如下所示。
示例5.9
代码语言:javascript复制
5.1.5 其他相关事件除了上面的事件外,jQuery中还有一些其他的常用事件,详见表5-1-5所示。
表5-1-5 jQuery其他事件
其他事件
说明
change( [ [data] , fn ] )
元素的值发生改变时发生的事件
select( [ [data] , fn ] )
input元素的选取事件
submit( [ [data] , fn ] )
表单提交事件
下面我们通过一个示例来演示change和select事件的用法,参考代码如下所示。
示例5.10
代码语言:javascript复制
分享到:WEB入门之十四 jQuery事件_java_08上述代码模拟把一段代码分享到个人博客或空间中,用到了change和select事件。只有选中文本区域中的代码时,按钮才会启用
5.2 事件对象evnet是前面我们在编写JavaScript代码时经常用到的对象之一,它表示事件对象,封装了跟事件相关的一些数据,例如事件源、事件类型等。jQuery在遵循W3C规范的情况下,对event对象做了进一步封装,使得该对象在各大浏览器下都可以正常运行。
在jQuery中,事件对象通常作为匿名函数的参数使用,语法如下所示:
jQuery对象 . 事件(
function ( e ) { //参数e就表示事件对象
alert( e.type );
}
)
jQuery中事件对象的常用属性见表5-1-6所示。
属性
说明
type
获取事件类型
target
获取触发事件的元素
result
获取上一个事件处理函数返回的值
which
获取在鼠标单击事件中获取鼠标的按键,值1表示鼠标左键;值2表示鼠标中键;值3表示鼠标右键
pageX/Y
获取事件发生时相对于页面的坐标
keyCode
获取在键盘事件中键盘对应的键值
screenX/Y
获取事件发生时相对于屏幕的坐标
data
事件发生时传递的参数的信息都保持在该属性中
下面通过一个示例来演示jQuery中事件对象的用法,参考代码如下所示。
示例5.11
代码语言:javascript复制
5.3 jQuery合成事件jQuery中有两个合成事件:hover和toggle,这两个是DOM中不存在的事件,都属于jQuery自定义的事件。
5.3.1 hover事件该事件用来模拟鼠标悬停事件,当鼠标移到元素上时会触发第1个函数的执行;当鼠标移出这个元素时会触发第2个函数的执行。语法如下所示:
jQuery对象 . hover ( fn1 , fn2 )
下面我们通过一个示例来演示该事件的用法。
示例5.12
代码语言:javascript复制
什么是jQuery?
WEB入门之十四 jQuery事件_java_10图5.1.10 hover事件
5.3.2 toggle事件该事件用于模拟鼠标的连续单击事件,第1次单击时触发第1个函数的执行;第2次单击时触发第2个函数的执行;第n次单击时触发第n个函数的执行。语法如下所示:
jQuery选择器 . toggle ( fn1 , fn2 , fn3 , ... ... )
下面我们通过一个示例来演示该事件的用法。
示例5.13
代码语言:javascript复制
什么是jQuery?
WEB入门之十四 jQuery事件_java_115.4 jQuery事件绑定jQuery提供了诸多函数来处理复杂的事件,例如动态绑定事件,或者一个元素同时绑定多个事件处理函数,或者多个元素同时共用一个事件处理函数等。jQuery常用绑定函数见表5-1-7所示。
表5-1-7 jQuery常用绑定函数
函数名
说明
bind
为某元素动态绑定事件及处理函数
unbind
移除某元素的事件,与bind相反
live
相当于增强的bind函数,详见下面介绍
die
删除通过live绑定的事件,与live相反
on
jQuery1.7版本中新增的事件绑定函数,用来逐步替代bind和live,性能更好
off
用来移除某元素的事件,与on相反
下面我们通过一些示例来演示上述函数的用法。
5.4.1 bind和unbindbind是从jQuery 1.0版本就出现的事件绑定函数,具体语法如下所示。
jQuery对象 . bind ( type , [data] , fn )
参数说明:
type:表示事件类型
data:该参数可选,表示事件发生时通过event对象传递的值
fn:表示事件发生时的处理函数
下面我们实现一个通过焦点事件改变文本框背景颜色的示例,首先用以前的普通方式实现,参考代码如下所示。
示例5.14
代码语言:javascript复制
| 用户登录 | |
| 登录名称: | |
| 登录密码: | |
示例5.15
代码语言:javascript复制
| 用户登录 | |
| 登录名称: | |
| 登录密码: | |
jQuery对象 . bind (
{
事件名 : fn() { },
事件名 : fn() { },
... ...
}
)
下面我们使用这种写法重新实现示例5.15,参考代码如下所示。
示例5.16
代码语言:javascript复制
| 用户登录 | |
| 登录名称: | |
| 登录密码: | |
unbind与bind相反,用来移除某元素绑定的事件,具体语法如下所示:
jQuery对象 . unbind ( [ type ] , [ fn ] )
参数说明:
type:可选参数,表示事件类型
fn:可选参数,表示函数名
unbind函数常见的用法如下所示:
1. 无参,表示移除元素上绑定的所有事件
$("p").unbind(); //移除段落元素的所有事件
2. 一个参数,表示移除元素上指定的某个事件
$("p").unbind("click"); //移除段落元素的鼠标单击事件
5.4.2 live和dielive的作用及用法跟bind差不多,但它进行了功能上的增强。假设给所有的文本框通过bind绑定了鼠标单击事件,然后再动态创建一个文本框,此时绑定的鼠标单击事件对这个新创建的文本框无效;但是如果使用live进行绑定,那么新创建的文本框也会绑定鼠标单击事件。
下面我们实现一个表格中的行在鼠标单击时改变背景色的示例,首先通过bind实现,参考代码如下所示。
示例5.17
代码语言:javascript复制
商品名称 | 商品售价 | 产地 | 删除 |
添加商品
WEB入门之十四 jQuery事件_java_13在上述代码中,我们给按钮绑定了鼠标单击事件,在该事件中主要实现动态生成行和单元格并添加到表中,同时给所有的行绑定了鼠标单击事件,用来实现背景色的改变。添加过两个商品后,表格中一共有3行数据,第1行是原本存在的,后两行是动态创建并添加到表格上的。现在单击表格中的行,我们会发现只有第1行的背景色可以改变,后两行的背景色没有改变。这说明对于动态创建的元素,bind是无能为力的。但是如果把示例5.17中的bind换成live,这个问题就解决了。
把bind换成live后,表格中的任何一行在单击时都可以改变背景色,包括动态创建的行。
die函数跟前面的unbind类似,用来移除某元素上绑定的事件,具体语法如下所示:
jQuery对象 . die ( [ type ] , [ fn ] )
参数说明:
type:可选参数,表示事件类型
fn:可选参数,表示函数名
die函数常见的用法如下所示:
1. 无参,表示移除元素上绑定的所有事件
$("p").die(); //移除段落元素的所有事件
2. 一个参数,表示移除元素上指定的某个事件
$("p").die("click"); //移除段落元素的鼠标单击事件
2. 一次移除多个事件,中间用空格隔开
$("p").die("click mouseover"); //移除段落元素的鼠标单击事件和鼠标悬浮事件
5.4.3 on和offon是jQuery 1.7版本中新增的函数,用来逐步取代旧的bind和live函数,运行速度和质量更加优秀,具体语法如下所示:
jQuery对象 . on ( events , [data] , fn )
参数说明:
events:表示事件类型,多个事件用空格隔开
data:该参数可选,表示事件发生时通过event对象传递的值
fn:表示事件发生时的处理函数
下面我们通过一个示例来演示on函数的用法,该示例让用户输入自己的身份证号,然后单击按钮时分析出用户的出生日期。
示例5.18
代码语言:javascript复制
jQuery对象 . on ( "事件名" , { 参数名 : 参数值 } , function ( e )
{
alert(e.data.参数名); // 获得参数的值
}
)
off函数跟on函数相反,用来移除某元素上绑定的事件,该函数常见的用法如下所示:
1. 无参,表示移除元素上绑定的所有事件
$("p").off(); //移除段落元素的所有事件
2. 一个参数,表示移除元素上指定的某个事件
$("p").off("click"); //移除段落元素的鼠标单击事件
2. 一次移除多个事件,中间用空格隔开
$("p").off("click mouseover"); //移除段落元素的鼠标单击事件和鼠标悬浮事件
5.5 模拟触发事件大多数时候,事件都是由用户通过操作鼠标和键盘来触发的,但是也有一些情况需要通过代码来触发事件,这称之为模拟触发事件。
实现模拟触发事件的方式有两种:
1. jQuery对象.事件名()
2. jQuery对象.trigger( 事件名 )
下面我们把示例5.18由用户人工触发事件改为代码模拟触发事件,参考代码如下所示:
示例5.19
代码语言:javascript复制
trigger是jQuery提供的一个函数,用来模拟触发事件,并且可以传递参数,具体语法如下所示:
jQuery对象 . trigger ( "事件名" , [ "参数名" , "参数值" ] );
本章总结
本章主要学习jQuery事件,例如鼠标相关事件、键盘相关事件、焦点相关事件等,这些事件都是jQuery在DOM事件上进行了简单的封装。另外,jQuery还提供了更高级的合成事件、事件绑定等,这些会给编程带来更大的便利和功能的增强。
任务实训部分
1:实现简易计算器训练技能点
jQuery单击事件
需求说明
使用jQuery事件实现计算器功能。
WEB入门之十四 jQuery事件_java_152:实现横向菜单训练技能点
jQuery鼠标悬浮/离开事件
需求说明
使用jQuery鼠标悬浮/离开事件实现横向菜单。
WEB入门之十四 jQuery事件_java_16实现步骤
(1)实现图5.2.2所示的界面
(2)给一级菜单设置hover事件实现二级子菜单的显示和隐藏,参考代码如下所示。
代码语言:javascript复制
| 关于中信 | 公司业务 | 公益事业 | 中信研究 | 推荐招聘 | 特色推荐 |
jQuery键盘事件
需求说明
按照图5.2.3所示的界面使用jQuery键盘事件实现漂浮的鱼。图中较小的鱼是单独一张图片,后面的是背景图片。用户通过按下键盘上的↑↓→ ←键控制鱼的移动。
WEB入门之十四 jQuery事件_java_174:种族选择训练技能点
jQuery change事件
需求说明
使用jQuery change事件实现种族选择。选择下拉列表框中不同的项,就显示不同的图片。
WEB入门之十四 jQuery事件_java_18实现步骤
(1) 实现图5.2.4所示的界面,默认不显示任何图片
(2) 给下拉列表框设置change事件,并实现选择下拉列表框中不同的项,就显示不同的图片,参考代码如下所示。
代码语言:javascript复制