JavaScript « Не работает setAttribute для img src в IE

Добрый день,

Как поменять img src в JS чтобы в IE не было ошибок?
Пробовал так:
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .javascript.geshi_code {font-family:monospace;} .javascript.geshi_code .imp {font-weight: bold; color: red;} .javascript.geshi_code .kw1 {color: #000066; font-weight: bold;} .javascript.geshi_code .kw2 {color: #003366; font-weight: bold;} .javascript.geshi_code .kw3 {color: #000066;} .javascript.geshi_code .co1 {color: #006600; font-style: italic;} .javascript.geshi_code .co2 {color: #009966; font-style: italic;} .javascript.geshi_code .coMULTI {color: #006600; font-style: italic;} .javascript.geshi_code .es0 {color: #000099; font-weight: bold;} .javascript.geshi_code .br0 {color: #009900;} .javascript.geshi_code .sy0 {color: #339933;} .javascript.geshi_code .st0 {color: #3366CC;} .javascript.geshi_code .nu0 {color: #CC0000;} .javascript.geshi_code .me1 {color: #660066;} .javascript.geshi_code span.xtra { display:block; }

    var hatImage = document.getElementById("topHat");
    hatImage.setAttribute("src", imag);
 

и так:
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .javascript.geshi_code {font-family:monospace;} .javascript.geshi_code .imp {font-weight: bold; color: red;} .javascript.geshi_code .kw1 {color: #000066; font-weight: bold;} .javascript.geshi_code .kw2 {color: #003366; font-weight: bold;} .javascript.geshi_code .kw3 {color: #000066;} .javascript.geshi_code .co1 {color: #006600; font-style: italic;} .javascript.geshi_code .co2 {color: #009966; font-style: italic;} .javascript.geshi_code .coMULTI {color: #006600; font-style: italic;} .javascript.geshi_code .es0 {color: #000099; font-weight: bold;} .javascript.geshi_code .br0 {color: #009900;} .javascript.geshi_code .sy0 {color: #339933;} .javascript.geshi_code .st0 {color: #3366CC;} .javascript.geshi_code .nu0 {color: #CC0000;} .javascript.geshi_code .me1 {color: #660066;} .javascript.geshi_code span.xtra { display:block; }

    var hatImage = document.getElementById("topHat");
    hatImage.src=imag;
 


Все равно в IE8 выскакивает ошибка "null есть null или не является объектом". В FF все нормально работает.

Дополняю вопрос:
В отдельном js-файле есть функция:
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .javascript.geshi_code {font-family:monospace;} .javascript.geshi_code .imp {font-weight: bold; color: red;} .javascript.geshi_code .kw1 {color: #000066; font-weight: bold;} .javascript.geshi_code .kw2 {color: #003366; font-weight: bold;} .javascript.geshi_code .kw3 {color: #000066;} .javascript.geshi_code .co1 {color: #006600; font-style: italic;} .javascript.geshi_code .co2 {color: #009966; font-style: italic;} .javascript.geshi_code .coMULTI {color: #006600; font-style: italic;} .javascript.geshi_code .es0 {color: #000099; font-weight: bold;} .javascript.geshi_code .br0 {color: #009900;} .javascript.geshi_code .sy0 {color: #339933;} .javascript.geshi_code .st0 {color: #3366CC;} .javascript.geshi_code .nu0 {color: #CC0000;} .javascript.geshi_code .me1 {color: #660066;} .javascript.geshi_code span.xtra { display:block; }

function showRabbit(imag,id,k,f_open, price)
{
    var hatImage = document.getElementById("topHat");
    var hatZakaz = document.getElementById("zakaz");
    var opdescr = document.getElementById("open_descr");
    var imag_link="javascript:open_window('"+f_open+"','',500,500)";
    opdescr.setAttribute("href", imag_link);
    //hatImage.setAttribute("src", imag); // проблемное место
    hatImage.src=imag; // проблемное место
    eval ('document.forms["global"].select_val.value=id;');
    changeDesc(price);
}
 


Картинка в исходном html тоже есть. Т.е. она не создается средствами JS.

Внизу этой страницы есть вызов:
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .javascript.geshi_code {font-family:monospace;} .javascript.geshi_code .imp {font-weight: bold; color: red;} .javascript.geshi_code .kw1 {color: #000066; font-weight: bold;} .javascript.geshi_code .kw2 {color: #003366; font-weight: bold;} .javascript.geshi_code .kw3 {color: #000066;} .javascript.geshi_code .co1 {color: #006600; font-style: italic;} .javascript.geshi_code .co2 {color: #009966; font-style: italic;} .javascript.geshi_code .coMULTI {color: #006600; font-style: italic;} .javascript.geshi_code .es0 {color: #000099; font-weight: bold;} .javascript.geshi_code .br0 {color: #009900;} .javascript.geshi_code .sy0 {color: #339933;} .javascript.geshi_code .st0 {color: #3366CC;} .javascript.geshi_code .nu0 {color: #CC0000;} .javascript.geshi_code .me1 {color: #660066;} .javascript.geshi_code span.xtra { display:block; }

<script language='JavaScript'>
displayColor('man', '/pic/9512/man/white_250.jpg','0','/pic/9512/man/white_500.jpg','white', 450)
</script>
 


А из функции displayColor уже вызывается showRabbit(img,colors,s,f_image, price).
Функция displayColor (совершенно лишнее вырезал):
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .javascript.geshi_code {font-family:monospace;} .javascript.geshi_code .imp {font-weight: bold; color: red;} .javascript.geshi_code .kw1 {color: #000066; font-weight: bold;} .javascript.geshi_code .kw2 {color: #003366; font-weight: bold;} .javascript.geshi_code .kw3 {color: #000066;} .javascript.geshi_code .co1 {color: #006600; font-style: italic;} .javascript.geshi_code .co2 {color: #009966; font-style: italic;} .javascript.geshi_code .coMULTI {color: #006600; font-style: italic;} .javascript.geshi_code .es0 {color: #000099; font-weight: bold;} .javascript.geshi_code .br0 {color: #009900;} .javascript.geshi_code .sy0 {color: #339933;} .javascript.geshi_code .st0 {color: #3366CC;} .javascript.geshi_code .nu0 {color: #CC0000;} .javascript.geshi_code .me1 {color: #660066;} .javascript.geshi_code span.xtra { display:block; }

function displayColor(id, img, s, f_image,colors, price){
    var model=document.getElementById("model");
    var mans=document.getElementById("mod_man");

    var man1=document.getElementById("man1");
    var man2=document.getElementById("man2");
    var man3=document.getElementById("man3");

    var fm=document.getElementById("fman");

    if (mans){
        mans.style.display='none';
        man1.className='z_noact1';
        man2.className='z_noact3';
        man3.className='z_noact2';
    }
    if(id=='man'){
        model.value='man';
        mans.style.display='';
        man1.className='z_act1';
        man2.className='z_act3';
        man3.className='z_act2';
        fm.className='f_act1';
        showRabbit(img,colors,s,f_image, price)
    }
}
 


UPD. Проверил на двух других восьмых IE - ошибки нет. На моем ослике - ошибка устойчивая. Хз что такое.

1 ответов


На ум приходит только тот факт, что IE временами неправильно грузит и обрабатывает inline-скрипты.
Попробуйте так:


window.onload = function () {
    var hatImage = document.getElementById("topHat");
        hatImage.src=imag;
}
 

Что я делаю не так? (надеюсь вы меняете src для картинки, которая уже есть в DOM, ну или как минимум js ниже нее?)
У меня работает в IE 8:


<img id='image' src='http://img.yandex.net/i/www/logo.png'>
            <script type='text/javascript'>
                var i = document.getElementById('image');
                alert(i.src);
                alert(i.src = 'http://www.google.ru/intl/en_com/images/srpr/logo1w.png');
                // так тоже работает
                // i.setAttribute('src','http://www.google.ru/intl/en_com/images/srpr/logo1w.png');
                $(function(){
                    var i = document.getElementById('image');
                    alert(i.src);
                    $('#but').click(function(){
                        var i = document.getElementById('image');
                        alert(i.src);
                    });
                });            
            </script>
            <span id='but'>покажи src!</span>
 

может у вас что-то специфичное?
Картинка есть изначально или создается через JS?
Если можно, чуть подробнее опишите ваш случай.

(** в примере jQuery чисто для удобства заюзал)

И все же... Не поленитесь попробовать:


window.onload = function () {
    displayColor('man', '/pic/9512/man/white_250.jpg','0','/pic/9512/man/white_500.jpg','white', 450);
}