Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

[JS] Динамически создать событие OnClick

1
18 марта 2013 года
kot_
7.3K / / 20.01.2000
Есть код:

Код:
xmlParseImages: function(xml)
    {
        var i, a, images, image, img;
       
        images = xml.getElementsByTagName('image');
       
        this.imagesList.innerHTML = images.length == 0 ? 'Изображений нет' : '';
       
        for (i=0; i<images.length; i++)
        {
            img = new Image();
            var path = images[i].getAttribute('src');
            var imageid = images[i].getAttribute('id');
            img.align = 'left';
            img.height = 125;
            img.id = imageid;

            img.width = 125;
            img.border = 2;
            img.vspace = 5;
            img.hspace = 5;
            img.src = path;
            img.onclick = function(){window.opener.who(path);window.close();};
            this.imagesList.appendChild(img);
           
        }
    },
Смысл кода достаточно простой - из базы выгружаются картинки в xml, создается окно - все работает нормально. Но есть одна проблема - при создании картинки я задаю событие onclick - мне нужно, что бы при клике на картинку, это окно закрылось и была вызвана функция who(path) в которую передается адрес картинки. Так вот проблема в том, что всегда передается адрес последней картинки в списке. А должно - то по которой кликнули. В чем может быть проблема и как это сделать правильно?
2.2K
18 марта 2013 года
REFOT
181 / / 08.04.2005
А лучше попробуй так :)
 
Код:
img.onclick = function(){window.opener.who(this.src);window.close();};
446
18 марта 2013 года
Meander
487 / / 04.09.2011
А так:
 
Код:
var foo =  function(){window.opener.who(path);window.close();};
img.onclick = foo;
?
274
18 марта 2013 года
Lone Wolf
1.3K / / 26.11.2006
Попробуй так.
 
Код:
img.onclick = function(){window.opener.who(img.src);window.close();};
1
18 марта 2013 года
kot_
7.3K / / 20.01.2000
Совершенно без разницы.
Событие срабатывает - но в функцию передается адрес последней картинки - не важно на какую их них кликаешь.
Если цеплять через addEventListener - то вообще происходит очень интересно - событие срабатывает в момент загрузки картинок. :) сижу - пытаюсь понять как можно решить данную проблему.
1
18 марта 2013 года
kot_
7.3K / / 20.01.2000
Цитата: REFOT
А лучше попробуй так :)
 
Код:
img.onclick = function(){window.opener.who(this.src);window.close();};


БИНГО!
Блин, три часа просидел - не сообразил, что в данном случае this будет указывать на img.
Спасибо за подсказку.

1
18 марта 2013 года
kot_
7.3K / / 20.01.2000
Цитата: Meander
А так:
 
Код:
var foo =  function(){window.opener.who(path);window.close();};
img.onclick = foo;
?


Да. Это тоже будет работать.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог