Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.03.2015, 22:25
Аспирант
Отправить личное сообщение для Василий Б. Посмотреть профиль Найти все сообщения от Василий Б.
 
Регистрация: 01.03.2010
Сообщений: 44

Назначение событий не работает в Opera/Chrome
Здравствуйте.
Вкратце опишу ситуацию.
На странице можно выбрать изображение и оно загрузится на сервер.

При выборе изображения срабатывает onchange на input type=file и форма сабмитится в скрытый фрейм. В ответе фрейма - js код, который на основную страницу внедряет HTML код с только что загруженной картинкой. Короче, стандартный метод для загрузки файла без перезагрузки страницы.

Для того, что бы удалить только что загруженное изображение мне достаточно из формы основной страницы удалить hidden поле с ID изображения. Тогда, при подаче объявления загруженное изображение не прикрепится к объявлению, а крон пройдет и убьет этот файл изображения (т.к. у него нет связи с объявлением).

Так вот, что бы удалить hidden поле из основной страницы я для каждого изображения рисую кнопочку в виде удаления. И на эту ссылку-кнопку я ставлю события вот так:

setInterval(function() {
            // получаю все ссылки-кнопки удаления изображений
            var removed_links = Krugozor.DOM.getElementsByClassName(.....);
            
            for (var i=0; i < removed_links.length; i++) {
                // это тег и на него еще не назначено событие...
                if (removed_links[i].nodeType == 1 && !removed_links[i].getAttribute('data-event')) {
                    Krugozor.Events.attachEvent(removed_links[i], 'click', function(e){
                       // назначаю событие
                        alert('Кликнули на ссылку удаления изображения');
                    });
                    // флаг, что на эту кнопку-ссылку поставлено событие
                    removed_links[i].setAttribute('data-event', '1');
                }
            }
        }, 500);


Соответственно метод Krugozor.Events.attachEvent:

Krugozor.Events = {
    /**
     * Назначает элементу element событие event типа event_type.
     * 
     * @param object element 
     * @param string тип события, например "click"
     * @param function event обработчик события
     * @return object element
     */
    attachEvent: function(element, event_type, event) {
        if (document.addEventListener) { // W3C
            element.addEventListener(event_type, event, false);
        } else if (document.attachEvent) { // IE
            element.attachEvent('on' + event_type, event);
        }

        return element;
    },


В FF, IE 11 и в Safari - все ок.
В Opera и Chrome происходит следующее:

Загрузили изображение 1 - событие проставилось на кнопку-ссылку удаления изображения №1.
Загрузили изображение 2 - событие проставилось на кнопку-ссылку удаления изображения №2 и куда-то пропало с кнопки-ссылки удаления изображения №1.

Как это понимать? Я не могу это никак даже объяснить. Куда пропадают события?

Последний раз редактировалось Василий Б., 03.03.2015 в 22:33.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
JS: работает на сервере, не работает из папки -majestic- Общие вопросы Javascript 2 02.08.2012 14:41
Не работает push! Динамическая вставка TSEH25 ExtJS 5 03.07.2012 13:00
jQyery функция странно работает! Midel Общие вопросы Javascript 4 08.04.2012 13:40
помогите найти ошибку (работает в IE но не работает в Firefox) Len4ik Javascript под браузер 2 11.05.2010 15:41
ajax запросы, работает на одних компах и не работает на других vtornik23 AJAX и COMET 2 22.03.2010 18:22