не работает в IE - PullRequest
       8

не работает в IE

2 голосов
/ 30 августа 2011

Этот код скрывает испорченное изображение, но, к сожалению, он не работает в IE.

(function() {
        var img = document.getElementsByTagName('img'),
        i = 0, len = img.length;
        for(; i < len; i++) { 
            img[i].onerror = function() {
              this.style.visibility= 'hidden';
            }
        }
}());

Подскажите пожалуйста, в чем ошибка.

Ответы [ 2 ]

3 голосов
/ 30 августа 2011

Это потому, что вы не назначаете обработчик onerror до тех пор, пока не произошло событие onerror?

В большинстве случаев я бы, вероятно, не рекомендовал бы встроенные обработчики событий, но для этой конкретной целиВы можете попробовать:

<img src="..." onerror="this.style.visibility='hidden';">

(я знаю, было бы больно иметь это на каждом теге img, но я думаю, что это с большей вероятностью сработает.)

0 голосов
/ 30 августа 2011

Ваш код правильный - также для Internet Explorer. Проблема в том, где вы запускаете свой код (мы не видим его здесь). Если он находится в конце страницы, может случиться так, что некоторые изображения уже загружены и событие onerror просто не произойдет. Вы можете легко протестировать его с помощью решения, предложенного nnnnnn (встроенный скрипт). Однако, чтобы найти право и решение (для IE) и не изменять каждое встроенное img - вы можете попробовать применить проверку к некоторым атрибутам изображения, таким как complete. Проблема в том, чтобы найти подходящее место для запуска такого теста. onload кажется правильным, но у вас будет похожая проблема, как с onerror - для определения события перед загрузкой изображения. В конце концов вы можете сделать немного подвох - запустив ваш цикл с некоторой задержкой (setTimeout) - и выполнить такой код из window.onload. Таким образом, код может выглядеть так:

(function() {
        var img = document.getElementsByTagName('img'),
        i = 0, len = img.length;
        for(; i < len; i++) { 
            if(!img[i].complete) {
              this.style.visibility = 'hidden';
            }
        }
})();

Запустите этот код только для IE. На Chrome img[i].complete может дать истину для сломанной ссылки на изображение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...