所有`ids`始终来自最后一个对象

时间:2013-09-21 15:17:04

标签: javascript jquery for-loop

我想为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。

1 个答案:

答案 0 :(得分:1)

这与闭包没有直接关系,而是与变量header在全局范围内有关。声明新变量时,应使用var关键字,否则假定它是全局对象的属性(window)。

如果启用严格模式(通过将"use strict";添加到代码顶部或函数顶部),您将被告知这些错误。

要明确,您需要更改

header = document.createElement('img');

var header = document.createElement('img');

(并且应该对所有你的变量做同样的事情)