20-Javaweb学习-高级事件- trigger、triggerHandler、on off one

20-Javaweb学习-高级事件- trigger、triggerHandler、on off one

高级事件

浏览器一打开自动触发我们绑定的事件

$(function() {
        $('button').bind('click', function() {

           alert("点击了");
        });

        $(‘button’).trigger(‘click’); //浏览器一打开自动触发该点击事件

         以上两步可以合写在一起如下
          /*
         $('button').bind('click', function() {

                 alert("点击了");
          }).trigger('click');
          */
});

高级事件2

Trigger 传递数据

$('button').bind('click', function(e,data1,data2,data3) {

alert("取出trigger传过来的数据"+data1+"和"+data2[0]+"和"+data3.name);
}).trigger('click',['abc',[2,3],{name:'hello'}]);

//注意多个数据用[ ] 括起来,data1 ,data2,data3 指的就是[ ]中的数据

那么bind在绑定事件的时候也能传递数据,这里要跟trigger传递的数据区分一下
如果是bind传递的数据我们用事件对象e中的data属性取数据
$('button').bind('click',{age:'23'},function(e,data1,data2,data3) {
alert("取出trigger传过来的数据"+data1+"和"+data2[0]+"和"+data3.name+"和bind中传递的数据要用事件对象e中的data属性去取"+e.data.age);
}).trigger('click',['abc',[2,3],{name:'hello'}]);

高级事件3之自定义事件

$('button').bind('myEvent',function(){

           alert('自定义事件');

}).trigger('myEvent');

高级事件4 之trigger简写方案

.trigger()方法提供了简写方案,只要想让某个事件执行模拟用户行为,直接再调用一个空的同名事件即可。
$('button').bind('click', function() {
     alert("点击了");
}).trigger('click');

//上面的可以简写为如下的:
$('input').click(function () {
	alert('我的第一次点击来自模拟!');
}).click(); //空的 click()执行的是 trigger()

这种便捷的方法,jQuery 几乎个所有常用的事件都提供了。
blur focusin mousedown resize
change focusout mousenter scroll
click keydown mouseleave select
dblclick keypress mousemove submit
error keyup mouseout unload
focus load mouseover
//注意为了语义性更加好,一般不推荐简写方案,当然你要使用也是没有问题的

高级事件5之triggerHandler()

jQuery 还提供了另外一个模拟用户行为的方法:.triggerHandler();这个方法的使用和.trigger()方法一样。

$('input').click(function () {
	alert('我的第一次点击来自模拟!');
}).triggerHandler('click');

在常规的使用情况下,两者几乎没有区别,都是模拟用户行为,也可以可以传递额外参数。但在某些特殊情况下,就产生了差异

高级事件6trigger和triggerHandler的区别

区别1:
1..triggerHandler()方法并不会触发事件的默认行为,而.trigger()会。
<form action="123.html" method="get">
       <input type="submit" value="提交" />
</form>

$('form').trigger('submit'); //模拟用户执行提交,并跳转到执行页面
$('form').triggerHandler('submit'); //模拟用户执行提交,并阻止的默认行为

如果我们希望使用.trigger()来模拟用户提交,并且阻止事件的默认行为,则需要这么写:
$('form').submit(function (e) {
	e.preventDefault(); //阻止默认行为
}).trigger('submit');

高级事件7 trigger和triggerHandler的区别

区别2..triggerHandler()方法只会影响第一个匹配到的元素,而.trigger()会影响所有。
例如:我给三个按钮都设置了点击事件 用trigger会弹三次 用triggerHandler只弹一次
<body>
<button>一个按钮</button>
<button>一个按钮</button>
<button>一个按钮</button>
</body>
$('button').bind('click',function(){

alert(‘弹了’);//弹三次

}).trigger('click');

$('button').bind('click',function(){

alert(‘弹了’); //弹一次

}). triggerHandler('click');

高级事件8 trigger和triggerHandler的区别

区别3..triggerHandler()方法会返回当前事件执行的返回值,如果没有返回值,则返回undefined;而.trigger()则返回当前包含事件触发元素的 jQuery 对象(方便链式连缀调用)$('button').bind('click',function(){
	alert("弹了");
}).trigger(‘click’).css({‘background’:‘red’});//返回的是这个按钮对象可以连调

alert($('input').click(function () {
	return 123;
}).triggerHandler('click')); //返回 123,没有 return 返回

高级事件9 trigger和triggerHandler的区别

4..trigger()在创建事件的时候,会冒泡。但这种冒泡是自定义事件才能体现出来,是
jQuery 扩展于 DOM 的机制,并非 DOM 特性。而.triggerHandler()不会冒泡。
<body>
   <div>
      <div>一个按钮</div>
   </div>
</body>

$('div').bind('myEvent', function() {
	alert(“div弹了”); //不会冒泡弹一次
}).triggerHandler('myEvent');


$(function() {
$('div').bind('myEvent', function() {
	alert(“div弹了”);//会冒泡 弹三次
}).trigger('myEvent');

});

高级事件10 on off one

目前绑定事件和解绑的方法 在 jQuery1.7 以后推出了.on().off()方法彻底摒弃bind()和unbind()。
老方式 绑定事件 bind()   新方式  on()
老方式 解绑事件 unbind()  新方式 off()
以后推荐使用新方式来绑定和解绑事件

//替代.bind()方式
$('.button').on('click', function () {
	alert('替代.bind()');
});

//替代.bind()方式,并使用额外数据和事件对象
$('.button').on('click', {user : 'Lee'}, function (e) {
	alert('替代.bind()' + e.data.user);
});

高级事件11新方式 on off one

//替代.bind()方式,并绑定多个事件
$('.button').on('mouseover mouseout', function () {
	alert('替代.bind()移入移出!');
});
//替代.bind()方式,以对象模式绑定多个事件
$('.button').on({
	mouseover : function () {
	alert('替代.bind()移入!');
},
mouseout : function () {
	alert('替代.bind()移出!');
}
});

高级事件12 on off one

//替代.bind()方式,阻止默认行为并取消冒泡
$(‘form’).on(‘submit’, function () {
	return false;//返回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');

高级事件13 one

One 表示事件执行一次
//类似于.bind()只触发一次
$('.button').one('click', function () {
	alert('one 仅触发一次!');
});

例子:事件委托 給button的父元素 设置点击事件,让里面动态生成的子元素也具有点击事件
<div id="box">
<button>一个按钮</button>
</div>

//on普通事件委托
$('#box').on('click', 'button', function () {
$(this).clone().appendTo('#box');
});

//取消事件委托
$('#box').off('click', 'button');

发布了63 篇原创文章 · 获赞 11 · 访问量 2051

猜你喜欢

转载自blog.csdn.net/weixin_42401546/article/details/105349960