1 模拟操作
1.1 .trigger()方法
$('input').click(function () {
alert('我将要使用模拟用户操作来触发!');
});
//模拟用户点击操作
$('input').trigger('click');
等效于
$('input').click(function () {
alert('我将要使用模拟用户操作来触发!');
}).trigger('click');
//trigger额外数据,只有一条的时候,可以省略中括号,多条不能省略,否则第二条之后就无法识别了。
$('input').click(function (e, data1, data2, data3, data4) {
alert(data1 + '|' + data2 + '|' + data3[1] + '|' + data4.user);
}).trigger('click', ['123', 'abc', ['a', 'b' , 'c'], {user : 'Lee'}]);
$('input').bind('click', {user : 'Lee'} ,function (e, data1, data2, data3, data4) {
alert(data1 + '|' + data2 + '|' + data3[1] + '|' + data4.user + '|' + e.data.user);
}).trigger('click', ['123', 'abc', ['a', 'b' , 'c'], {user : 'Lee'}]);
//click,mouseover这些是系统事件,自定义事件就是自己起名字的事件
$('input').bind('myEvent', function () {
alert('自定义事件!');
}).trigger('myEvent');
.trigger()方法提供了简写方案,只要想让某个事件执行模拟用户行为,直接再调用一个空的同名事件即可。
$('input').click(function () {
alert('我将要使用模拟用户操作来触发!');
}).click();
1.2 .triggerHandler()方法
(1) .triggerHandler()方法并不会触发事件的默认行为,而.trigger()会。
//trigger提交后跳转,没有阻止默认行为
$('form').trigger('submit');
//trigger提交后没有跳转,默认行为被阻止了
$('form').triggerHandler('submit');
//如果我们希望使用.trigger()来模拟用户提交,并且阻止事件的默认行为,则需要这么写
$('form').submit(function (e) {
e.preventDefault(); //阻止默认行为
}).trigger('submit');
(2) .triggerHandler()方法只会影响第一个匹配到的元素,而.trigger()会影响所有。
(3).triggerHandler()方法会返回当前事件执行的返回值,如果没有返回值,则返回undefined;而.trigger()则返回当前包含事件触发元素的jQuery 对象(方便链式连缀调用)。
$('input').click(function () {
alert('我将要使用模拟用户操作来触发!');
}).trigger('click').css('color', 'red'); //返回jQuery对象,可以连缀
$('input').click(function () {
alert('我将要使用模拟用户操作来触发!');
return 123;
}).triggerHandler('click'); //返回123
(4).trigger()在创建事件的时候,会冒泡。但这种冒泡是自定义事件才能体现出来,是jQuery 扩展于DOM 的机制,并非DOM 特性。而.triggerHandler()不会冒泡。
$('div').bind('myEvent', function () {
alert('自定义事件!');
})
$('.d3').trigger('myEvent'); //会冒泡
$('.d3').triggerHandler('myEvent'); //不会冒泡
2 命名空间
$('input').bind('click.abc', function () {
alert('abc');
});
$('input').bind('click.xyz', function () {
alert('xyz');
});
$('input').bind('mouseover.abc', function () {
alert('abc');
});
$('input').unbind('click.abc'); //移除click 事件中命名空间为abc的
$('input').unbind('.abc'); //移除命名空间为abc的所有事件
//对于模拟操作.trigger()和.triggerHandler(),用法也是一样的。
$('input').trigger('click.abc');
3 事件委托与事件绑定
在jQuery 中,我们通过事件冒泡的特性,让子元素绑定的事件冒泡到父元素(或祖先元素)上,然后再进行相关处理即可。
使用.live()具备动态绑定功能,jQuery1.3 使用,jQuery1.7 之后废弃,jQuery1.9 删除。由于.live()和.die()在jQuery1.4.3版本中废弃了,之后推出语义清晰、减少冒泡传播层次、又支持链接连缀调用方式的方法:.delegate()和.undelegate()。但这个方法在jQuery1.7 版本中被.on()方法整合替代了。
普通绑定.bind,普通解绑.unbind;事件委托.live .delegate,解除委托.die .undelegate。新方法绑定.on,新方法解绑.off。从jQuery1.7 以后推出了.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 (e) {
alert('移入移出');
});
//替代.bind()方式,以对象模式绑定多个事件
$('.button').on({
mouseover : function () {
alert('移入');
},
mouseout : function () {
alert('移出');
}
});
//替代.bind()方式,阻止默认行为并取消冒泡
$('form').on('submit', function () {
return false;
});
或
$('form').on('submit', false);
$('.button').on('click', function () {
alert('替代bind');
});
$('.button').off('click');
//替代.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');
//替代.live .delegate
$('#box').on('click', '.button', function () {
$(this).clone().appendTo('#box');
});
//移出事件委托
$('#box').off('click', '.button');
jQuery 提供了.one()方法,绑定元素执行完毕后自动移除事件,可以方法仅触发一次的事件。
//类似于.bind()只触发一次
$('.button').one('click', function () {
alert('one 仅触发一次!');
});
//类似于.delegate()只触发一次
$('#box).one('click', 'click', function () {
alert('one 仅触发一次!');
});
本文转自stock0991 51CTO博客,原文链接:http://blog.51cto.com/qing0991/1361123,如需转载请自行联系原作者