javascript closure 闭包 事件绑定
先来一个基本的例子
<!-- 实现一段脚本,使得点击对应链接alert出相应的编号 -->
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<body>
<a href='#'> 第一个链接 </a> </br>
<a href='#'> 第二个链接 </a> </br>
<a href='#'> 第三个链接 </a> </br>
<a href='#'> 第四个链接 </a> </br>
<script type="text/javascript">
var lis = document.links;
for(var i = 0, length = lis.length; i < length; i++) {
(function(i) {
lis[i].onclick = function() {
alert(i + 1);
};
})(i);
}
</script>
</body>
使用addEventListener
<!DOCTYPE html>
<html>
<head>
<meta name="description" content="[closure click ex]">
<meta charset="utf-8">
<title>JS Bin</title>
</head>
<body>
<a href='#' id="a0"> 第一个链接 </a> </br>
<a href='#' id="a1"> 第二个链接 </a> </br>
<a href='#' id="a2"> 第三个链接 </a> </br>
<a href='#' id="a3"> 第四个链接 </a> </br>
</body>
<script>
var links = document.querySelectorAll('body>a');
// links.forEach(function(ele,idx){ //这是一个NodeList 是ArrayLike对象 不是真正的数组 是不能forEach的
// });
for (var i = links.length - 1; i >= 0; i--) {
links[i].addEventListener('click', (function(idx){
return function(e){
console.log(idx + ' ' + e.target.id);
};
})(i), false);
}; </script>
</html>
此题也可以不使用闭包来实现
//另外一种使用事件代理的方式 //没有使用闭包
var ul = document.querySelector('#ul1');
var lis = document.querySelectorAll('#ul1 .li-ele');
var lisArr = [];
for( i= 0; i< lis.length; i++){
lisArr.push(lis[i]);
}
//PS 注意 不能直接用lis.indexOf
//它是 NodeList 是类数组 没有 indexOf 方法
ul.addEventListener('click', function(e){
var target = e.target;
console.log(lisArr.indexOf(target));
}, false);
=========更新==========
然而上面的方式还是太笨了 下面这个既可以不用闭包也可以绑定上对应的事件
var doc = document;
var list = doc.querySelectorAll('ul li'); [].forEach.call(list, function(ele, index){
ele.addEventListener('click', function(){
console.log(index);
}, false);
});
javascript closure 闭包 事件绑定的更多相关文章
- JavaScript利用闭包循环绑定事件
我们经常在做前端面试题的时候,会遇到循环绑定事件后,输出打印结果,很多人总是搞不清楚,今天借此机会跟大家梳理一下闭包相关作用. 1.首先我们举一个简单的例子. html部分: <a href=& ...
- 理解Javascript中的事件绑定与事件委托
最近在深入实践js中,遇到了一些问题,比如我需要为动态创建的DOM元素绑定事件,那么普通的事件绑定就不行了,于是通过上网查资料了解到事件委托,因此想总结一下js中的事件绑定与事件委托. 事件绑定 ...
- JavaScript 中 onload 事件绑定多个方法的优化建议
页面加载完毕时会触发 onload 事件.基于内容(HTML)要与行为(JavaScript)分离的编码思想,我们需要将一些对页面的初始化操作写在方法内,并通过window.onload = func ...
- JavaScript 中 onload 事件绑定多个方法
当需要调用的方法较多时,我们可以进一步优化,编写一个专门用于绑定 onload事件的方法: function addLoadEvent(func) { //把现有的 window.onload 事件处 ...
- jQuery 事件绑定 和 JavaScript 原生事件绑定
总结一下:jQuery 事件绑定 和 JavaScript 原生事件绑定 及 区别 jQuery 事件绑定 jQuery 中提供了四种事件监听绑定方式,分别是 bind.live.delegate.o ...
- JavaScript事件绑定的常见方式
在Javascript中,事件绑定一共有3种方式: ① 行内绑定 ② 动态绑定 ③ 事件监听 原文: https://mbd.baidu.com/newspage/data/landingsuper? ...
- js、jq事件绑定方式总结——以click事件为例
一.JavaScript点击事件绑定方法 1.1 HTML onclick事件属性 <button onclick="clickMe(this)">click me&l ...
- 深入理解JavaScript的闭包特性如何给循环中的对象添加事件
初学者经常碰到的,即获取HTML元素集合,循环给元素添加事件.在事件响应函数中(event handler)获取对应的索引.但每次获取的都是最后一次循环的索引.原因是初学者并未理解JavaScript ...
- 在Javascript中闭包(Closure)
在Javascript中闭包(Closure) 什么是闭包 “官方”的解释是:所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分. ...
随机推荐
- Android Navigation Drawer(导航抽屉)
Google I/O 2013 Android 更新了Support库,新版本的Support库中新加入了几个比较重要的功能. 添加 DrawerLayout 控件,支持创建 Navigation ...
- HDoj-1228-A + B
A + B Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- setTimeOut和setInterval详解
setTimeout和setInterval的语法相同.它们都有两个参数,一个是将要执行的代码字符串,还有一个是以毫秒为单位的时间间隔,当过了那个时间段之后就将执行那段代码.不过这两个函数还是有区别的 ...
- tomcat最大线程数的设置(转)
1.Tomcat的server.xml中连接器设置如下 <Connector port="8080" maxThreads="150" minSpareT ...
- Struts学习之自定义拦截器
* 所有的拦截器都需要实现Interceptor接口或者继承Interceptor接口的扩展实现类 * 要重写init().intercept().destroy()方法 * in ...
- Android 常用动画小结
1. 渐入动画 // Request the next activity transition (here starting a new one). startActivity(new Intent( ...
- 转:CI伪静态化
去掉php框架CI默认url中的index.php 2010-03-17 17:33:07| 分类: php框架ci |字号 订阅 CI默认的rewrite url中是类似这样的,例如你的CI根 ...
- Storm博客收集
http://wbj0110.iteye.com/category/292875 http://blog.csdn.net/hguisu/article/details/8454368?reload ...
- Pro/Engineer wildfire 5.0 野火版系列下载及安装方法
三.PTC Pro/Engineer wildfire 5.0 M030 野火版最新版 DVD 下载(多国语言) 1.野火下载站下载32&64位下载:[32位] http://down.pro ...
- JavaEE Tutorials (12) - 创建和使用基于字符串的Criteria查询
12.1基于字符串的Criteria API查询概述17812.2创建基于字符串的查询17812.3执行基于字符串的查询179