我想为img
内的每个for-loop
元素的Cookie添加删除选项。问题是所有ids
始终来自最后一个对象。
我尝试了什么:
function listCookies() {
var theCookies = document.cookie.split(';');
var aString = '';
for (var i = 1; i <= theCookies.length; i++) {
(function (i) {
if (theCookies[i - 1].indexOf("pauseCookie-") >= 0) {
cookieArray = theCookies[i - 1].split("=");
theCookie = $.trim(cookieArray[0]);
cookieInfo = $.cookie($.trim(theCookie));
cookieInfo = cookieInfo.split("^");
...
htmlCode = "<div id='pauseDiv-" + theCookie + "'><a href='" + cookiePath + "'>" + cookieTitle + "</a> (" + pauseInfo + ") </div><br />";
$("#cookiesContent").append(htmlCode);
header = document.createElement('img');
header.id = 'delImg' + theCookie;
header.style = 'cursor:pointer';
header.src = delImage;
header.onclick = function () {
alert("#pauseDiv-" + header.id);
//$.removeCookie(theCookie,{path:'/'});
$("#pauseDiv-" + theCookie).html("<div class=\"pauseDivResponse\">Deleted</div>");
}
document.getElementById("pauseDiv-" + theCookie).appendChild(header);
}
})(i);
}
}
listCookies();
alert(“#pauseDiv-”+ header.id);始终打印我创建的所有img元素的最后一个id。
答案 0 :(得分:1)
这与闭包没有直接关系,而是与变量header
在全局范围内有关。声明新变量时,应使用var
关键字,否则假定它是全局对象的属性(window
)。
如果启用严格模式(通过将"use strict";
添加到代码顶部或函数顶部),您将被告知这些错误。
要明确,您需要更改
header = document.createElement('img');
到
var header = document.createElement('img');
(并且应该对所有你的变量做同样的事情)