-
js的attachEvent传递的参数总是最后一个,求解决办法5
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> <html> <head> <title>About</title> <meta http-equiv=Content-Type content="text/html; charset=gb2312"> </head> <body > <table width="100%"> <tr><a href="#" onClick="alert('123');" >123明细信息</a></tr> <tr><a href="#" onClick="alert('456');" >456明细信息</a></tr> <tr><a href="#" onClick="alert('789');" >789明细信息</a></tr> <tr><text>ss</text></tr> <table> </body> <script language="javascript"> function initHrefColor(objs){ var objs=document.getElementsByTagName("a"); var obj=null; outer:for(var i=0;i<objs.length;i++){ obj=objs[i]; obj.attachEvent("onclick",function (){aaa(obj);}); }} initHrefColor(); function aaa(obj){ alert(obj.innerText); } </script> </html>
不论点击哪个超链接alert(obj.innerText);获取到的值总是最后一个的值“789明细信息”。求解决方法,使能获取到相对应超链接的值。
问题补充:谢谢大家的帮助
非常感谢
2012年9月12日 22:16
4个答案 按时间排序 按投票排序
-
采纳的答案
1、var obj=null;
outer:for(var i=0;i<objs.length;i++){
obj=objs[i];
obj.attachEvent("onclick",function (){aaa(obj);});
}}
aaa(obj);//obj=objs数组最后一个,所以这样肯定不对;
2、attachEvent不支持Mozilla系列,需要addEventListener
http://www.cnblogs.com/poorpan/archive/2011/08/10/2134039.html
3、我们通过event传递,然后通过如下代码拿到目标对象
var src = event.srcElement;
if(!src) {
src = event.target;
}
http://codex.wordpress.org.cn/HTML%E5%85%B3%E4%BA%8EEvent%E5%AF%B9%E8%B1%A1
4、可执行代码:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> <html> <head> <title>About</title> <meta http-equiv=Content-Type content="text/html; charset=utf8"> </head> <body > <table width="100%" border="1"> <tr><td><a href="#" >123明细信息</a></td></tr> <tr><td><a href="#" >456明细信息</a></td></tr> <tr><td><a href="#" >789明细信息</a></td></tr> <tr><td><text>ss</text></td></tr> <table> </body> <script language="javascript"> function initHrefColor(){ var objs=document.getElementsByTagName("a"); var obj=null; outer:for(var i=0;i<objs.length;i++){ obj=objs[i]; //非Mozilla系列 if(obj.attachEvent) { obj.attachEvent("onclick",aaa); } else { obj.addEventListener("click",aaa); } }} function aaa(event){ var src = event.srcElement; if(!src) { src = event.target; } alert(src.innerText); } initHrefColor(); </script> </html>
2012年9月13日 07:10
-
这是常见的JS中的作用域问题,使用闭包就可以解决,另外jinnianshilongnian 指出的浏览器兼容问题也需要注意一下。还有,在js编写规范里,提到将js写到head里是最好的,
但是你这里var objs=document.getElementsByTagName("a"); 如果写在head里肯定拿不到,所以要加上window.onload去执行。或者引用jquery的$(function(){}),这两个的区别你可以百度一下,另外推荐一个网址,帮助你大体上了解一下js
http://bonsaiden.github.com/JavaScript-Garden/zh/function initHrefColor(objs) { var objs = document.getElementsByTagName("a"); var obj = null; for (var i = 0; i < objs.length; i++) { (function (e) { e.attachEvent("onclick", function () { aaa(e); }); })(objs[i]) } } function aaa(obj) { alert(obj.innerText); } initHrefColor();
第一次回答问题希望对你有帮助2012年9月13日 13:48
-
你没有搞清楚, 推荐你去看一下, 变量作用域是怎么样工作的
搜索了一篇文章:http://www.cnblogs.com/terryglp/articles/1776695.html
var obj=null;
outer:for(var i=0;i<objs.length;i++){
obj=objs[i];
obj.attachEvent("onclick",function (){aaa(obj);});
}}
这里function (){aaa(obj);}, 引用了obj这个变量, 每次循环, 其实obj的指向都在变,
循环结果, obj就指向objs数组里最后一个元素了
这时, 在点击触发aaa(obj), alert的东西就会一直是最后一个a
推荐babydeed的方法,2012年9月13日 10:33
-
function initHrefColor(objs){
var objs=document.getElementsByTagName("a");
for(var i=0;i<objs.length;i++){
var obj = objs[i];
obj.onclick = function(){
aaa(this);
}
}
}
initHrefColor();
function aaa(obj){
alert(obj.innerText);
}2012年9月12日 23:11
相关推荐
总结来说,为了解决在IE中使用attachEvent方法时不能直接传递参数的问题,可以利用闭包的特性创建一个新的包装函数。这个包装函数接收期望的参数,并返回一个新的函数作为事件处理函数。这样就可以保证每次事件触发...
解决方法是在attachEvent内部定义一个新的函数,将所需的参数传递给这个内部函数,并返回一个新的函数,该函数会正确地处理事件和传入的参数。 举一个具体的例子,假设有一个按钮和一个需要传递给点击事件处理函数...
例如,尝试在`addEventListener`或`attachEvent`中直接传递参数的方式都是无效的,因为它们只会接收一个函数作为参数,而不会自动包含传递的额外参数。 解决这个问题的一种常见方法是使用闭包。在提供的解决方案中...
在描述中的代码示例中,使用了闭包来解决`attachEvent`传递参数的问题。这里有两个版本的代码: 第一个版本中,`str`变量定义在立即执行的函数表达式(IIFE)内部,确保了其作用域的限制。在事件处理函数`func`中,...
1. 在 attachEvent 中,最后一个绑定的函数会最先执行,而在 addEventListener 中,绑定的函数按照绑定顺序执行。 2. attachEvent 只能用于 IE8 及以下版本的 Internet Explorer 浏览器。 3. addEventListener 更...
在JavaScript中,`window.open()` 是一个非常常用的函数,用于打开一个新的浏览器窗口或者标签页。通常,`window.open()` 的使用方式是 `window.open(url, target, features)`,其中 `url` 是要打开的页面的地址,`...
但是要注意,`addEventListener`有第三个参数用于指定事件处理函数的执行顺序(默认为false,即事件冒泡阶段),而`attachEvent`没有这个参数,所以通常在使用`attachEvent`时不需要传递额外的参数。 尽管`onclick`...
针对上述问题,一个可行的解决方案是使用立即执行的函数表达式(IIFE),来创建一个新的作用域,这样每个事件处理函数都会拥有各自独立的i值。 例如: ```javascript for (var i = 0; i ; i++) { (function(index...
在JavaScript中,`attachEvent` 和 `addEventListener` 是两种用于为元素添加事件处理程序的方法,主要在Internet Explorer和非IE浏览器(遵循W3C标准)中使用。它们都是用来监听和响应用户或浏览器的特定行为,如...
//可以为外部定义的一个执行函数; } } function addfunction() { var bigobj=document.getElementById(“mytable”); var rows =bigobj.rows; for(var j=0; j<rows.length; j++) { for(var i=0;i<rows[j]....
在JavaScript中,为HTML元素注册click事件处理函数并传递参数时,可能遇到的一个典型问题是参数无法正确传递给事件处理函数。这通常发生在尝试直接将函数调用作为事件监听器注册时,如下面的错误用法: ```...
这段JS代码展示了一个巧妙的方法来处理事件监听,特别是在不同浏览器之间的兼容性问题。代码的核心是创建了一个名为`Mouse`的构造函数,它用于添加鼠标移动事件的监听器。在这个过程中,我们看到了如何利用`bind`...
为了解决这个问题,我们可以编写一个兼容的函数处理事件,确保在任何浏览器中都能正常工作。 接着,鼠标当前位置的获取也有所不同。IE使用`event.x`和`event.y`,而FF则使用`event.pageX`和`event.pageY`。通用的...
2. 事件绑定:使用`addEventListener`和`attachEvent`进行事件监听,将函数作为事件处理程序,并传递参数。 3. 事件处理函数:定义了`swap`函数,处理事件逻辑,包括DOM元素的样式改变和类的添加。 4. 事件触发:...
在JavaScript中,DOM事件处理程序的封装是跨浏览器兼容性的一个关键步骤,因为不同的浏览器对事件处理有不同的实现。本文主要讨论了在将DOM事件处理程序封装到名为`event.js`的文件时可能出现的低级错误,并提供了...
5. **函数与闭包**:JavaScript中的函数既是语句,也是值,可以作为参数传递,也可以作为其他函数的返回值。闭包是JavaScript中的一个重要特性,它可以访问并操作外部函数的作用域,即使外部函数已经执行完毕。 6. ...
JavaScript,简称JS,是一种轻量级的解释型编程语言,广泛应用于网页和网络应用开发,实现客户端的交互功能。在本“JavaScript案例”压缩包中,包含了一系列的JS代码示例,这些案例可以帮助我们深入理解和掌握...