javascript动态为html元素添加事件?

我要实现这样一个功能:读取浏览器cookie并将它的信息输出。每一个不同的cookie就对应一个button。然后点击对应的button就会在特定的textarea中显示... 我要实现这样一个功能:
读取浏览器cookie并将它的信息输出。
每一个不同的cookie就对应一个button。
然后点击对应的button就会在特定的textarea中显示cookie的值,所有的cookie存放在一个数组中。
我在实现的过程中遇到了一个困难:假设有n个cookie,我先动态的生成n个button,并为button添加onclick函数:button_i.onclick=function(){ showCookieValue(cookie_i);} ,通过匿名函数的方式传递cookie信息。
但是我发现,点击所有的button,它们都只会显示同一个信息,就是最后那个cookie的信息。请问我的做法错了吗?该用什么方法好?
大致代码:
for(var j=0; j<cookie_length;j++)
{
var button_= document.createElement("button");
cookie_str = cookies[j]["name"];

cookie_ = cookies[j];
button_cbtn.id = str + j; //button的id为domain名+j

button_.onclick = function(){
setCookieValues(cookie_);
};
}

function setCookieValues(cookie_)
{
document.getElementById("cvalue").value = cookie_["value"];
}
展开
 我来答
lvyingtang
2013-05-20 · TA获得超过645个赞
知道小有建树答主
回答量:675
采纳率:100%
帮助的人:701万
展开全部
用闭包来解决就ok了,了解一下闭包吧!
cookie_str = cookies[j]["name"];在循环中这样用是不行的,j是引用,循环结束之后j的结果都是一样的,所有你永远得到的是最后一个,因为引用指向本来就是最后一个!

要解决这个问题,就要让j立即被运算出新结果,而不是留待上下文引用

这样试试:
cookie_str = (function(n){var fun=function(){return cookies[n]["name"];};return fun()})(j);
cookie_ = (function(n){var fun=function(){return cookies[n];};return fun()})(j);
或者这样:
cookie_str = eval('cookies['+j+']["name"]');
cookie_ = eval('cookies['+j+']');
wode5130
2013-05-19 · TA获得超过638个赞
知道小有建树答主
回答量:423
采纳率:100%
帮助的人:332万
展开全部
你使用的是数组循环来做的吧?这样的确会有这个问题,你贴代码,我给你改
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式