jQuery事件
页面加载
- DOM的页面加载机制
- 如果先编写JavaScript代码(用于获取页面元素),再加载页面元素
- 导致问题 – 无法成功获取页面元素
- 原因 – 执行这段JavaScript代码时,页面元素还没有被加载(不存在)
- 解决先执行代码后加载元素的问题 – window.onloa
- 保证先加载页面元素完毕后,在执行JavaScript代码
window对象表示浏览器窗口
- load事件 – 当浏览器窗口加载页面完毕时被触发
- 事件处理函数中的代码逻辑 -> 在浏览器加载页面完毕后执行
示例代码:
<!-- 先加载JavaScript代码逻辑 -->
<script>
/*
window对象表示浏览器窗口
* load事件 - 当浏览器窗口加载页面完毕时被触发
* 事件处理函数中的代码逻辑 -> 在浏览器加载页面完毕后执行
*/
window.onload = function(){
var btn = document.getElementById('btn');
console.log(btn);
}
</script>
</head>
<body>
<!-- HTML元素 -->
<button id="btn">按钮</button>
</body>
事件绑定
事件的绑定
bind(type, data, callback)方法 – 绑定事件
参数
- type – 表示绑定的事件名称(注意:没有on)
- data – 作为event.data属性传递给事件对象的额外数据对象
- callback – 表示绑定事件的处理函数
示例代码:
function click1(){
console.log('this is button.');
}
function click2(){
console.log('this is button too.');
}
$('#btn').bind('click', click1);
$('#btn').bind('click', click2);
解绑定事件
unbind(type, data, callback)方法 – 解绑定事件
参数
- type – 表示绑定的事件名称(注意:没有on)
- data – 作为event.data属性传递给事件对象的额外数据对象
- callback – 表示绑定事件的处理函数
情况
- 如果只传递事件名称的话 – 解绑定该事件的所有处理函数
- 如果传递事件名称和指定的处理函数 – 解绑定该事件的指定处理函数
示例代码:
$('#btn').unbind('click', click1);
bind()与unbind()中的data参数
- data参数的值 -> 利用event事件对象的data属性进行接收
- 特点 – 该参数的数据内容只能在事件的处理函数中被使用
示例代码:
$('#btn').bind('click', { a : '皮卡丘' }, function(event){
// var obj = { a : '皮卡丘' };
console.log(event.data);
});
多事件的绑定与解绑定
- bind()方法支持同时绑定多个事件 – 事件名称使用空格隔开
- 同时绑定的多个事件, 具有同一个处理函数
- unbind()
- 不传递任何参数 – 表示解绑指定元素的所有事件
- 传递一个事件名称 – 表示解绑指定元素的指定单个事件
- 传递多个事件名称 – 表示解绑指定元素的指定多个事件
- unbind()方法
- 没有指定任何事件时 – 将指定元素的所有事件全部解绑定
- 指定一个事件名称时 – 将指定元素的指定当个事件解绑定
- 指定多个事件名称时 – 将指定元素的指定多个事件解绑定
示例代码:
// bind()方法 - 多事件绑定,事件名称之间使用空格分隔
$('#title').bind('mouseover mouseout', function(){
if ($('ul').is(':hidden')) {
$('ul').css('display','block');
} else {
$('ul').css('display','none');
}
});
/*
unbind()方法
1.没有指定任何事件时 - 将指定元素的所有事件全部解绑定
2.指定一个事件名称时 - 将指定元素的指定当个事件解绑定
3.指定多个事件名称时 - 将指定元素的指定多个事件解绑定
*/
$('#title').unbind('mouseover mouseout');
事件绑定方法的对比
jQuery中提供多组事件绑定与解绑定的方法
- bind()与unbind() – jQuery 3.0版本后删除方法
on()与off()方法 – jQuery 1.7版本后新增方法
- 其实bind()与unbind()的底层方法就是on()和off()
live()与die() – jQuery 1.7版本后删除方法
- 作用 – 实现事件委托
delegate()与undelegate() – jQuery 1.6版本后新增方法,jQuery 3.0版本后删除方法
- 作用 – 实现事件委托
- one() – 为事件绑定一次性的函数
事件切换
示例代码:
// jQuery提供hover(over, out)方法
$('#title').hover(function(){
$('ul').css('display','block');
},function(){
$('ul').css('display','none');
});
事件模拟
- trigger()方法 – 可以模拟事件触发后的效果
示例代码:
<body>
<button id="btn">按钮</button>
<script>
// 绑定事件 - 由用户行为进行触发,调用处理函数
$('#btn').bind('click',function(){
console.log('this is button.');
});
// 模拟用户触发事件
$('#btn').trigger('click');
</script>
</body>