jQuery绑定事件
jQuery 通过.bind()方法来为元素绑定这些事件。可以传递三个参数:bind(type, [data], fn), type 表示一个或多个类型的事件名字符串;[data]是可选的,作为 event.data 属性值传递一个额外的数据,这个数据是一个字符串、一个数字、一个数组或一个对象;fn 表示绑定到指定元素的处理事件函数。
使用点击事件
可以同时绑定多个事件
通过对象键值对绑定多个参数
使用 unbind 删除绑定的事件
注意jQuery中的.unbind()只能解除jQuery绑定事件,不能解除原生dom对象绑定的事件;
注意:jQuery中的.unbind()解除所有jQuery绑定事件。
使用 unbind 参数删除指定类型事件
使用 unbind 参数删除指定处理函数的事件
简写事件
简写事件绑定方法
注意:jQuery事件简写等价于jQuery中的bind()
优化:Resize事件
表单提交事件:submit()
注意:
其中 return true:执行表单提交;
其中return false:不执行表单提交;
事件对象
回顾原生js事件中的对象:
常用的类型:pageX,pageY, target,type…
pageY,screenY,clientY的区别:
event.result
Event.keyCode
冒泡和默认行为
原生js中的表现方式:
阻止冒泡行为
event.preventDefault();
阻止浏览器默认行为
event.stopPropagation();
jQuery中事件对象的方法如下:
案例:
阻止事件冒泡行为
阻止浏览器自带的默认行为
使用$(“表单”).submit()方法提交表单,写法如下:
同时阻止默认行为且禁止冒泡行为
- 方式一:
可以把两个方法同时写上:event.stopPropagation()和 event.preventDefault() - 方式二:
使用return false;
高级事件
知识点:
1.模拟操作
2.命名空间
3.事件委托
4.on、off 和 one
模拟操作:trigger(“事件名”)
使用$(dom).trigger(“事件名”);
写法二:
trigger传入参数写法:
有时在模拟用户行为的时候,我们需要给事件执行传递参数,这个参数类似与 event.data 的额外数据,可以可以是数字、字符串、数组、对象。
绑定用户自定义事件:
快捷方式的书写方式
$('input').click(function () {
alert('我的第一次点击来自模拟!');//空的 click()执行的是 trigger()
}).click();
这种便捷的方法,jQuery 几乎个所有常用的事件都提供了。
triggerHandle
jQuery 还提供了另外一个模拟用户行为的方法:.triggerHandler();这个方法的使用和.trigger()方法一样。
$('input').click(function () {
alert('我的第一次点击来自模拟!');
}).triggerHandler('click');
Trigger()和triggerHandle()方法的区别
-
1…triggerHandler()方法并不会触发事件的默认行为,而.trigger()会。
$(‘form’).trigger(‘submit’); //模拟用户执行提交,并跳转到执行页面
$(‘form’).triggerHandler(‘submit’); //模拟用户执行提交,并阻止的默认行为
如果我们希望使用.trigger()来模拟用户提交,并且阻止事件的默认行为,则需要这么写:
$('form').submit(function (e) {
e.preventDefault(); //阻止默认行为
}).trigger('submit');
-
2.triggerHandler()方法只会影响第一个匹配到的元素,而.trigger()会影响所有。
-
3…triggerHandler()方法会返回当前事件执行的返回值,如果没有返回值,则返回undefined;而.trigger()则返回当前包含事件触发元素的 jQuery 对象(方便链式连缀调用)。
alert($('input').click(function () { return 123; }).triggerHandler('click'));//返回 123,没有 return 返回
命名空间
解决的问题:有时,我们想对事件进行移除。但对于同名同元素绑定的事件移除往往比较麻烦,这个时候,可以使用事件的命名空间解决。
代码如下:
委托方案如下:
注意:使用.bind()不具备动态绑定功能
案例:
jQuery委托方案二:使用delegate()和undelegate()
jQuery委托方案三:使用on和off
on、off的使用方式
替代.bind()方式
$('.button').on('click', function () {
alert('替代.bind()');
});
替代.bind()方式,并使用额外数据和事件对象
$('.button').on('click', {user : 'Lee'}, function (e) {
alert('替代.bind()' + e.data.user);
});
替代.bind()方式,并绑定多个事件
$('.button').on('mouseover mouseout', function () {
alert('替代.bind()移入移出!');
});
替代.bind()方式,以对象模式绑定多个事件
$('.button').on({
mouseover : function () {
alert('替代.bind()移入!');
},
mouseout : function () {
alert('替代.bind()移出!');
}
});
替代.bind()方式,阻止默认行为并取消冒泡
$('form').on('submit', function () {
return false;
});
或$(‘form’).on(‘submit’, false);
替代.bind()方式,阻止默认行为
$('form').on('submit', function (e) {
e.preventDefault();
});
替代.bind()方式,取消冒泡
$('form').on('submit', function (e) {
e.stopPropagation();
});
替代.unbind()方式,移除事件
$('.button').off('click');
$('.button').off('click', fn);
$('.button').off('click.abc');