js总结

事件冒泡、事件捕获、事件委托
  • 事件冒泡:从当前触发的事件目标一级一级往上传递,依次触发,直到document为止。
  • 事件捕获:会从document开始触发,一级一级往下传递,依次触发,直到真正事件目标为止。
  • 事件委托:又称事件代理。通过监听一个父元素,来给不同的子元素绑定事件,减少监听次数,从而提升速度。即把原本属于要绑定的事件委托给父元素,让父元素担当事件监听的职务。事件代理的原理是DOM元素的事件冒泡。使用事件代理的好处是可以提高性能。
jQuery事件监听
  1. bind :bind() 方法向被选元素添加一个或多个事件处理程序,以及当事件发生时运行的函数。

自 jQuery 版本 1.7 起,on() 方法是向被选元素添加事件处理程序的首选方法。
语法$(selector).bind(event,data,function,map)

参数描述
event必需。规定添加到元素的一个或多个事件。由空格分隔多个事件值。必须是有效的事件。
data可选。规定传递到函数的额外数据
function必需。规定当事件发生时运行的函数。
map规定事件映射 ({event:function, event:function, …}),包含要添加到元素的一个或多个事件,以及当事件发生时运行的函数。

特点:(1)适用于页面元素静态绑定。只能给调用它的时候已经存在的元素绑定事件,不能给未来新增的元素绑定事件。(2)当页面加载完成的时候,才可以进行bind(),所以可能产生效率问题。

$(document).ready(function(){

// 鼠标移入移出
$("p").bind("mouseover mouseout",function(){
    $("p").toggleClass("intro");
  });

// 事件映射
$("button").bind({
    click:function(){$("p").slideToggle();},
    mouseover:function(){$("body").css("background-color","#E9E9E4");},  
    mouseout:function(){$("body").css("background-color","#FFFFFF");}  
  });
// 向函数传递参数
$(document).ready(function(){
	$("p").bind("click", {msg: "你刚点击了!"}, handlerName)
});});
  1. live:live() 方法为被选元素附加一个或多个事件处理程序,并规定当这些事件发生时运行的函数。live()方法 W3school

live() 方法在 jQuery 版本 1.7 中被废弃,在版本 1.9 中被移除。请使用 on() 方法代替。

通过 live() 方法附加的事件处理程序适用于匹配选择器的当前及未来的元素(比如由脚本创建的新元素)。通过 live() 方法附加的事件处理程序适用于匹配选择器的当前及未来的元素(比如由脚本创建的新元素)。
语法$(selector).live(event,data,function)

参数描述
event必需。规定添加到元素的一个或多个事件。由空格分隔多个事件。必须是有效的事件。
data可选。规定传递到该函数的额外参数
function必需。规定当事件发生时运行的函数。

特点:(1)、live方法并没有将监听器绑定到自己(this)身上,而是绑定到了this.context上了。
  (2)、live正是利用了事件委托机制来完成事件的监听处理,把节点的处理委托给了document,新添加的元素不必再绑定一次监听器。
  (3)、使用live()方法但却只能放在直接选择的元素后面,不能在层级比较深,连缀的DOM遍历方法后面使用,即 ( “ u l ” " ) . l i v e . . . 可 以 , 但 (“ul”").live...可以,但 (ul").live...(“body”).find(“ul”).live…不行;
实例如下:$( document ).on( “click”, “#members li a”, function( e ) {} );

// 点击任意p元素令其消失,包括新添加的p元素
$(document).ready(function(){
  $("p").live("click",function(){
    $(this).slideToggle();
  });
  $("button").click(function(){
    $("<p>This is a new paragraph.</p>").insertAfter("button");
  });
});
  1. delegate:delegate() 方法将监听事件绑定在就近的父级元素上。delegate()方法
    使用 delegate() 方法的事件处理程序适用于当前或未来的元素(比如由脚本创建的新元素)。
    语法:$(selector).delegate(childSelector,event,data,function)
参数描述
childSelector必需。规定要附加事件处理程序的一个或多个子元素。
event必需。规定附加到元素的一个或多个事件。由空格分隔多个事件值。必须是有效的事件。
data可选。规定传递到函数的额外数据。
function必需。规定当事件发生时运行的函数。

特点:(1)、选择就近的父级元素,因为事件可以更快的冒泡上去,能够在第一时间进行处理。
  (2)、更精确的小范围使用事件代理,性能优于.live()。可以用在动态添加的元素上。

// 点击任意p元素令其消失,包括新添加的p元素
$(document).ready(function(){
  $("div").delegate("p","click",function(){
    $(this).slideToggle();
  });
  $("button").click(function(){
    $("<p>这是一个新段落。</p>").insertAfter("button");
  });
});
  1. 闭包
    (1)定义和用法:当一个函数的返回值是另一个函数,而返回的那个函数如果调用了其父亲函数内部的其他变量,如果返回的这个函数再外部被执行,就产生了闭包。
    (2)表现形式:使函数外部能够调用函数内部定义的变量。
function outer() {
     var  a = '变量1'
     var  inner = function () {
            console.info(a)
     }
    return inner    // inner 就是一个闭包函数,因为他能够访问到outer函数的作用域
}

(3)特性:
1.函数嵌套函数
2.函数内部可以引用外部的参数和变量
3.参数和变量不会被垃圾回收机制回收
5.
6.
7.
8.
9.
10.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值