jQuery事件使用方法总结(3)

说明:对于系统没有提供的事件,可以自己定义并主动触发。

$div.bind("abc",function () { $(this).css({ "background": "blue", }); }) $div.trigger("abc");

trigger():触发事件的方法;这种方式类似协程。

八、事件的两大特征运用: 1. 事件的冒泡:

定义:一个元素标签如div,在上面触发某种事件,如单击;如果div上没有定义单击事件或者定义了单击事件,但返回值不是false,即没有阻止冒泡;那么事件会向父级传递,每一个定义了单击事件的父级都会被触发事件,直到到达document或window。

注意:冒泡是事件的固有属性(自定义不适用),适合所有的系统事件。

作用: 允许多个事件被击中到父级处理,减少绑定次数,提高性能。

$(function(){ var $box1 = $('.father'); var $box2 = $('.son'); var $box3 = $('.grandson'); $box1.click(function() { alert('father'); }); $box2.click(function() { alert('son'); }); $box3.click(function(event) { alert('grandson'); // event.stopPropagation();阻止冒泡 }); $(document).click(function(event) { alert('grandfather'); }); }) ...... <div class="father"> <div class="son"> <div class="grandson"></div> </div> </div>

说明:上面代码界面,单击“grandson”的div,所有事件都会被触发;

如果要阻止事件冒泡,使用stopPropagation()

扩展:合并阻止操作

event.stopPropagation();//阻止冒泡 event.preventDefault();//阻止默认行为 // 合并写法: return false;

实际开发中,一般把阻止冒泡和阻止默认行为合并起来写。

2. 事件委托

定义:

利用冒泡原理,将要处理相同事件的子元素的事件委托给父级,从而极大减少事件绑定的次数,提高性能。

委托事件

delegate():

$(function(){ $list = $('list'); $list.delegate('li', 'click', function(event) { $(this).css({background:'red'}); }); })//给列表下面的每个li元素的事件委托给list列表。

参数:第一个参数是需要委托的元素,采用css选择器的写法,默认从一级子元素开始;第二个参数时要委托的事件,可以是多个,之间用空格隔开,第三个参数是处理函数。

event指触发事件的那个对象。

on():

$(function(){ $list = $('list'); $list.on('click', 'li', function(event) { $(this).css({background:'red'}); }); })//给列表下面的每个li元素的事件委托给list列表。

参数:

第一个是需要委托的事件,多个用空格隔开;

第二个是需要委托事件的子元素;

第三个是触发处理函数。

one():委托触发一次自动取消委托

$(function(){ $('div').one('click',"li" function(event) { $(this).css({ "background": "blue", }); }); });

说明:参数用法和on事件一样。

取消委托

undelegate():

$list.undelegate();//选择器找到委托对象取消委托

使用undelegate()方法取消委托,所有的子元素的委托都将被取消。

off():

$list.off("click","li");

总结:

每一个事件相当于一个协程,异步操作;

所有的事件并列处理,事件不要嵌套事件,否则会出现重复绑定。

可以进行事件委托尽量使用委托,减少系统资源消耗。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/42608c05fa57ab6b83a9c7d03a7fa0c3.html