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 - ошибки нет. На моем ослике - ошибка устойчивая. Хз что такое.
Как поменять 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);
}