Все `идентификаторы` всегда из последнего объекта [дубликата]

0

Я хочу добавить параметр удаления для файла cookie каждого элемента img внутри for-loop. проблема в том, что все 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); всегда печатает последний id из всех элементов img, которые я создал.

Теги:
for-loop

1 ответ

1
Лучший ответ

Это напрямую не связано с закрытием, но связано с тем, что header переменной находится в глобальной области. Когда вы объявляете новую переменную, вы должны использовать ключевое слово var, иначе предполагается, что это свойство глобального объекта (window).

Если вы включите строгий режим (добавив "use strict"; вверху вашего кода или верхнюю часть функции), вам расскажут об этих ошибках.

Чтобы быть ясным, вам нужно изменить

header = document.createElement('img');

в

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

(и должен делать то же самое для всех ваших переменных)

  • 0
    да, это сделал это. Спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню