Javascript循环绑定事件的示例代码
例如:一个不确定长度的列表,在鼠标经过某一条的时候改变背景。
Untitled Page
- 第1条记录
- 第2条记录
- 第3条记录
- 第4条记录
- 第5条记录
- 第6条记录
var list_obj = document.getElementById("list").getElementsByTagName("li"); //获取list下面的所有li的对象数组
for (var i = 0; i
[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
这个例子循环为一组对象绑定事件处理函数。
但是,如果我们在这个基础上增加一些需求。比如在点击某一条记录的时候弹出这是第几条记录?
肯能你会理所当然的这么写:
Untitled Page
- 第1条记录
- 第2条记录
- 第3条记录
- 第4条记录
- 第5条记录
- 第6条记录
var list_obj = document.getElementById("list").getElementsByTagName("li"); //获取list下面的所有li的对象数组
for (var i = 0; i
[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
测试一下你会发现alert出来的都是:这是第6记录
其实这里for循环已将整个列表循环了一遍,并执行了i++,所以这里i变成了6,
有什么好的办法解决这个问题吗?
那就是闭包了,个人认为闭包是js中最难捉摸的地方之一,
看看什么是闭包:
闭包时是指内层的函数可以引用存在与包围他的函数内的变量,即使外层的函数的执行已经终止。
这个例子中我们可以这样做:
Untitled Page
- 第1条记录
- 第2条记录
- 第3条记录
- 第4条记录
- 第5条记录
- 第6条记录
function tt(nob) {
this.clickFunc = function() {
alert("这是第" + (nob + 1) + "记录");
}
}
var list_obj = document.getElementById("list").getElementsByTagName("li"); //获取list下面的所有li的对象数组
for (var i = 0; i
[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
PS:闭包很难,很复杂!
相关推荐
-
JS中动态添加事件(绑定事件)的代码
两种方式:直接给对象添加事件,节点添加事件 例如给一个id为tab1的添加onclick事件 第一种情况: 复制代码 代码如下: var t = document.getElementById("tab1"); t.onclick = function tst(){ alert(''); } 第二种情况 复制代码 代码如下: var tb = document.getElementById("tab1"); if(window.addEventListener){
-
js和jquery批量绑定事件传参数一(新猪猪原创)
复制代码 代码如下: <input type="button" value="btn1" id="btn1"/> <input type="button" value="btn2" id="btn2"/> <input type="button" value="btn3" id="btn3"/>
-
javascript重复绑定事件造成的后果说明
最近在修改百度地图开源的东西,想把里面耦合在一起的代码给拆分出来.拆解之后,发现了一些坑爹的问题.逻辑上没有问题的情况下,该出现的效果没有出现.然后就以为是代码哪里写得不对了,就一直找啊找的.在调试的时候发现,相应的事件被执行了两遍.瞬间就明白了,肯定在哪个地方重复绑定了事件.果然,真心脑残的绑定了两次事件. 平时在写代码的时候,如果发现绑定的事件触发了两次,那就要查看是否是绑定了两次事件了.别傻傻的先去查看代码哪里处处了,或者怀疑别人的api有问题. 此文仅记录本人开发的时候遇到的问题.最近修
-
javascript 浏览器判断 绑定事件 arguments 转换数组 数组遍历
复制代码 代码如下: var $d = document; function $i(s){return $d.getElementById(s);} var _jsc={} _jsc.client=(function(){ var t={}; var b=navigator.userAgent.toLowerCase(); t.isOpera=(b.indexOf('opera')>-1) t.isIE=(b.indexOf('msie')>-1) t.isFF=(!t.isOpera&
-
Javascript动态绑定事件的简单实现代码
下面是页面的dom结构 复制代码 代码如下: <ul id="test"> <li>One</li> <li>Two</li> <li>Three</li> <li>Four</li> </ul> 下面是javascript代码 复制代码 代码如下: //根据ID获取对象 function id(v) { return document.getElementById(
-
js绑定事件this指向发生改变的问题解决方法
可对函数进行如下扩展 复制代码 代码如下: Function.prototype.bind = function(obj) { var _this = this; return function() { _this.apply(obj,arguments); } } 用法如下 复制代码 代码如下: var a = function(){ alert(this.title) }.bind(document); a(); 常用在这儿 复制代码 代码如下: function myalert() { t
-
js添加绑定事件的方法
先介绍js添加事件通用方法,具体内容如下 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <p id="p1">测试添加事件:firefox使用addEventListener,ie使用attachEvent<br> 点击此p标签
-
JavaScript绑定事件监听函数的通用方法
事件绑定的3中常用方法:传统绑定.W3C绑定方法.IE绑定方法.但是,在实际开发中对于我们来讲重要的是需要一个通用的.跨浏览器的绑定方法.如果我们在互联网上搜索一下会发现许多方法,以下是比较知名的几种方法: 在开始学期下面几种方法之前,应当讨论一下,一个好的addEvent()方法应当达到哪些要求: a.支持同一元素的同一事件句柄可以绑定多个监听函数: b.如果在同一元素的同一事件句柄上多次注册同一函数,那么第一次注册后的所有注册都被忽略: c.函数体内的this指向的应当是正在处理事件的节点(
-
JavaScript在for循环中绑定事件解决事件参数不同的情况
有时候要对响应一堆相似的事件,但是每个事件的参数都不同,一开始还以为挺简单的,用个for循环不就得了,结果发现,额,都是使用了最后一个参数... 上网查资料!!!结果大神说用闭包解决 代码: 复制代码 代码如下: for(var i=0;i<10;i++){ btns[i].onclick=(function(i){ return function(){alert(i)} })(i) } 大概原因是直接用btns[i].onclick=function(){alert(i)}时,JavaScri
-
JavaScript中利用jQuery绑定事件的几种方式小结
开发过程中经常要给DOM元素添加一些事件,下面介绍几种方式: 先写几个好看的button //引入JQuery <script type="text/javascript" src="jquery-1.8.3.min.js"></script> <span id="tips"></span> <input type="button" id="btn1"
-
js移除事件 js绑定事件实例应用
复制代码 代码如下: /** * @description 事件绑定,兼容各浏览器 * @param target 事件触发对象 * @param type 事件 * @param func 事件处理函数 */ function addEvents(target, type, func) { if (target.addEventListener) //非ie 和ie9 target.addEventListener(type, func, false); else if (target.att
-
理解JS绑定事件
本文为大家详细分析了JS绑定事件,供大家参考,具体内容如下 绑定事件有兼容性问题,在IE早期版本中使用的是obj.attachEvent(),而其他浏览器使用的则是addEventListener(). 这两个方法都有三个参数,分别为:事件类型,事件函数,最后一个是布尔值,true或者是false. true表示在事件捕获阶段执行,false表示在事件冒泡阶段执行. 由于IE只支持事件冒泡,所以同大多数情况下,都是将事件处理程序添加到事件流的冒泡阶段,即默认为"false" 这样可以最
-
浅析js绑定事件的常用方法
浅析js绑定事件的常用方法 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http:
-
JS中批量给元素绑定事件过程中的相关问题使用闭包解决
在JS中,你写一个for循环的时候,内部的循环变量I其实是会保存在它运行的函数或类内的,所以你会发现你给元素批量绑定事件的时候,出现i=最后一个循环变量的值,这就很坑爹啊,解决的方案有2钟, 思路就是:把这个循环变量保存起来,不要让它的作用域在整个函数,而是在循环体内 1.使用闭包(如果你不懂闭包,请打开百度:www.baidu.com) 2.使用with关键字,with语法是with( obj ) { //使得可以在此直接访问obj的属性,而不用加obj.XXX } 代码示例: 复制代码 代码
随机推荐
- HTTP协议入门_动力节点Java学院整理
- 两台服务器之间无密码传输数据和操作的方法
- 详解Java中StringBuffer类常用方法
- PHP新特性之字节码缓存和内置服务器
- Python作用域用法实例详解
- winxp 安装MYSQL 出现Error 1045 access denied 的解决方法
- PHP基于IMAP收取邮件的方法示例
- node.js实现博客小爬虫的实例代码
- Node学习记录之cluster模块
- 使用SWFUpload实现无刷新上传图片
- BootStrap实现响应式布局导航栏折叠隐藏效果(在小屏幕、手机屏幕浏览时自动折叠隐藏)
- 用批处理解决数学问题的代码第1/4页
- linux大于2T的磁盘使用GPT分区的方法分享
- 执行一条sql语句update多条记录实现思路
- java文件操作工具类分享(file文件工具类)
- 函数指针与指针函数的学习总结
- ReentrantLock实现原理详解
- IOS框架Spring常用的动画效果
- 几种实用的pythonic语法实例代码
- Vue实现一个无限加载列表功能