img.setAttribute('src', 'http://sstatic.net/so/img/logo.png');
Не используйте setAttribute
для HTMLElement. В Internet Explorer есть ошибки, и вы ничего не получите по сравнению с более удобочитаемой альтернативой DOM Level 1 HTML:
img.src= 'http://sstatic.net/so/img/logo.png';
Существенная проблема с setAttribute
в IE состоит в том, что он работает так же, как и обычный доступ к свойству, даже если свойство имеет другое имя или тип, чем атрибут. Итак, это:
img.setAttribute('onmouseover', "alert('mouseover')");
- это то же самое, что сказать:
img.onmouseover= "alert('mouseover')";
, что не имеет смысла: свойство onmouseover
, как и все обработчики событий, должно быть функцией, а не строкой. Вместо этого назначьте функцию:
img.onmouseover= function() {
alert('mouseover');
};
и затем вы избавились от неприятной практики в стиле eval - помещать код в строку. Ура!
Что касается addEventListener
, вы можете использовать его, если добавите резервный вызов attachEvent
для IE (который имеет собственную сумасшедшую систему прослушивания событий). Но в общем случае, когда у вас когда-либо есть только один прослушиватель для каждого элемента, гораздо проще придерживаться обработчиков событий старой школы, поддерживаемых каждым браузером onsomething
.