jquery 有四种绑定事件的方式:on, bind, delegate,live。其中 live() 方法已被移除。
自 jQuery 版本 1.7 起,on() 方法是 bind()、live() 和 delegate() 方法的新的替代。
$(selector).off(type)为元素解除绑定的事件
基本语法
$(selector).on(event,childSelector,data,function)
参数 | 描述 |
---|---|
event | 必需。事件的类型一个或多个,由空格分隔多个事件值。 |
childSelector | 可选。规定只能添加到指定的子元素上的事件处理程序(且不是选择器本身,比如已废弃的 delegate() 方法)。 |
data | 可选。事件额外的参数。使用函数的event.data获取 |
function | 可选。事件的执行函数 |
给button按钮绑定click事件示例
给同一个元素,多个事件绑定同一个function,event 事件名称可以中间空格隔开传多个
可以给多个button按钮绑定同一个事件
childSelector 参数可以给子元素绑定事件
给子元素绑定事件,还能解决一个问题,比如我们新增的元素无法绑定事件问题
主要原因是事件是在 dom 加载的时候就已经完成了,新增的 div 元素 click 事件就无效了。
解决办法:把事件绑定在body元素上,再绑定childSelector 子元素事件
// 绑定新增#btn2元素click事件
$(document).ready(function () {
$('body').on('click', '#btn2', function () {
// do something....
console.log('btn 点击 ...')
})
})
off() 方法通常用于移除通过 on() 方法添加的事件处理程序。
自 jQuery 版本 1.7 起,off() 方法是 unbind()、die() 和 undelegate() 方法的新的替代品。
该方法给 API 带来很多便利,我们推荐使用该方法,它简化了 jQuery 代码库。
$("#id").click(function(){
$("button").off("click");
});
bind只能给符合条件的元素本身添加事件
on可以将子元素的事件委托给父元素进行处理,而且可以给动态添加的元素加上绑定事件
语法
$(selector).bind(event,data,function,map)
参数
| -------- | ---------------------------- |
|event |必需。规定添加到元素的一个或多个事件。由空格分隔多个事件值。必须是有效的事件。 |
| data | 可选。规定传递到函数的额外数据。 |
| function | 必需。规定当事件发生时运行的函数。|
| map | 规定事件映射 ({event:function, event:function, ...})
,包含要添加到元素的一个或多个事件,以及当事件发生时运行的函数。 |
比如给 div 下的所有 button 添加 click 事件
可以用bind
// 点 button 添加绑定
$('#demo button').bind('click', function () {
// do something....
console.log('btn 点击 ...')
});
也可以用on
$('#demo').on('click', 'button', function () {
// do something....
console.log('btn 点击 ...')
})
使用区别:
1.用on绑定实际上是委托给了父级div,也就是只给一个元素绑定了事件
2.bind用选择器选择了div下的所有button元素 依次绑定了事件。如果有很多很多子元素区别就很大了, bind会严重影响性能。
3.新增的元素,bind无法绑定事件,on可以给新增元素绑定事件
总的来说一般用 on 就可以替代其余几个了。