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"];
} 展开
读取浏览器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"];
} 展开
2个回答
展开全部
用闭包来解决就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+']');
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+']');
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询