0 0

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个答案 按时间排序 按投票排序

0 0

采纳的答案

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
0 0

这是常见的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
0 0

你没有搞清楚, 推荐你去看一下, 变量作用域是怎么样工作的
搜索了一篇文章: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
0 0

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

相关推荐

    Javascript attachEvent传递参数的办法

    总结来说,为了解决在IE中使用attachEvent方法时不能直接传递参数的问题,可以利用闭包的特性创建一个新的包装函数。这个包装函数接收期望的参数,并返回一个新的函数作为事件处理函数。这样就可以保证每次事件触发...

    JavaScript通过attachEvent和detachEvent方法处理带参数的函数

    解决方法是在attachEvent内部定义一个新的函数,将所需的参数传递给这个内部函数,并返回一个新的函数,该函数会正确地处理事件和传入的参数。 举一个具体的例子,假设有一个按钮和一个需要传递给点击事件处理函数...

    关于javaScript注册click大事传递参数的不胜利问题_.docx

    例如,尝试在`addEventListener`或`attachEvent`中直接传递参数的方式都是无效的,因为它们只会接收一个函数作为参数,而不会自动包含传递的额外参数。 解决这个问题的一种常见方法是使用闭包。在提供的解决方案中...

    attachEvent的使用方法与传递参数[IE|firefox]|angluo-javascript-37392.pdf

    在描述中的代码示例中,使用了闭包来解决`attachEvent`传递参数的问题。这里有两个版本的代码: 第一个版本中,`str`变量定义在立即执行的函数表达式(IIFE)内部,确保了其作用域的限制。在事件处理函数`func`中,...

    javascript attachEvent和addEventListener使用方法

    1. 在 attachEvent 中,最后一个绑定的函数会最先执行,而在 addEventListener 中,绑定的函数按照绑定顺序执行。 2. attachEvent 只能用于 IE8 及以下版本的 Internet Explorer 浏览器。 3. addEventListener 更...

    window.open()实现post传递参数

    在JavaScript中,`window.open()` 是一个非常常用的函数,用于打开一个新的浏览器窗口或者标签页。通常,`window.open()` 的使用方式是 `window.open(url, target, features)`,其中 `url` 是要打开的页面的地址,`...

    self.attachevent is not a function的解决方法

    但是要注意,`addEventListener`有第三个参数用于指定事件处理函数的执行顺序(默认为false,即事件冒泡阶段),而`attachEvent`没有这个参数,所以通常在使用`attachEvent`时不需要传递额外的参数。 尽管`onclick`...

    js循环动态绑定带参数函数遇到的问题及解决方案[转]

    针对上述问题,一个可行的解决方案是使用立即执行的函数表达式(IIFE),来创建一个新的作用域,这样每个事件处理函数都会拥有各自独立的i值。 例如: ```javascript for (var i = 0; i ; i++) { (function(index...

    attachEvent和addEventListener 使用方法

    在JavaScript中,`attachEvent` 和 `addEventListener` 是两种用于为元素添加事件处理程序的方法,主要在Internet Explorer和非IE浏览器(遵循W3C标准)中使用。它们都是用来监听和响应用户或浏览器的特定行为,如...

    js动态添加事件并可传参数示例代码

    //可以为外部定义的一个执行函数; } } function addfunction() { var bigobj=document.getElementById(“mytable”); var rows =bigobj.rows; for(var j=0; j&lt;rows.length; j++) { for(var i=0;i&lt;rows[j]....

    关于javaScript注册click事件传递参数的不成功问题

    在JavaScript中,为HTML元素注册click事件处理函数并传递参数时,可能遇到的一个典型问题是参数无法正确传递给事件处理函数。这通常发生在尝试直接将函数调用作为事件监听器注册时,如下面的错误用法: ```...

    这段js代码得节约你多少时间.docx

    这段JS代码展示了一个巧妙的方法来处理事件监听,特别是在不同浏览器之间的兼容性问题。代码的核心是创建了一个名为`Mouse`的构造函数,它用于添加鼠标移动事件的监听器。在这个过程中,我们看到了如何利用`bind`...

    javascript兼容性解决方法大全

    为了解决这个问题,我们可以编写一个兼容的函数处理事件,确保在任何浏览器中都能正常工作。 接着,鼠标当前位置的获取也有所不同。IE使用`event.x`和`event.y`,而FF则使用`event.pageX`和`event.pageY`。通用的...

    js 绑定带参数的事件以及手动触发事件

    2. 事件绑定:使用`addEventListener`和`attachEvent`进行事件监听,将函数作为事件处理程序,并传递参数。 3. 事件处理函数:定义了`swap`函数,处理事件逻辑,包括DOM元素的样式改变和类的添加。 4. 事件触发:...

    JavaScript将DOM事件处理程序封装为event.js 出现的低级错误问题.docx

    在JavaScript中,DOM事件处理程序的封装是跨浏览器兼容性的一个关键步骤,因为不同的浏览器对事件处理有不同的实现。本文主要讨论了在将DOM事件处理程序封装到名为`event.js`的文件时可能出现的低级错误,并提供了...

    javascript源代码_经典实例100.rar

    5. **函数与闭包**:JavaScript中的函数既是语句,也是值,可以作为参数传递,也可以作为其他函数的返回值。闭包是JavaScript中的一个重要特性,它可以访问并操作外部函数的作用域,即使外部函数已经执行完毕。 6. ...

    JavaScript案例

    JavaScript,简称JS,是一种轻量级的解释型编程语言,广泛应用于网页和网络应用开发,实现客户端的交互功能。在本“JavaScript案例”压缩包中,包含了一系列的JS代码示例,这些案例可以帮助我们深入理解和掌握...

Global site tag (gtag.js) - Google Analytics