Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > Проблема с FireFox


Автор: SlePoY_SniPeR 9.7.2010, 21:55
Пишу примитивный просмотр картинок на сайт. Исходник:
Код

function NextImage(id){
var imgs = new Array('1.jpg','2.jpg','3.jpg','4.jpg','5.jpg');
if(id==1){
    document.getElementById("prevurl").style.visibility = 'visible';
    document.links.item("prevurl").setAttribute("href","javascript:PrevImage(0)");
    document.links.item("nexturl").setAttribute("href","javascript:NextImage(2)");
    document.getElementById("cimage").src = imgs[id];
}
else{
    document.getElementById("prevurl").style.visibility = 'visible';
    document.links.item("prevurl").setAttribute("href","javascript:PrevImage("+(id-1)+")");
    document.links.item("nexturl").setAttribute("href","javascript:NextImage("+(id+1)+")");
    document.getElementById("cimage").src = imgs[id];
}
if(id==imgs.length-1){
    document.getElementById("nexturl").style.visibility = 'hidden';
    document.links.item("prevurl").setAttribute("href","javascript:PrevImage("+(id-1)+")");
    document.getElementById("cimage").src = imgs[id];
}
}

function PrevImage(id){
var imgs = new Array('1.jpg','2.jpg','3.jpg','4.jpg','5.jpg');
if(id==imgs.length){
    document.links.item("prevurl").setAttribute("href","javascript:PrevImage("+(imgs.length-1)+")");
    document.getElementById("cimage").src = imgs[id];
}
else{
    document.getElementById("nexturl").style.visibility = 'visible';
    document.links.item("prevurl").setAttribute("href","javascript:PrevImage("+(id-1)+")");
    document.links.item("nexturl").setAttribute("href","javascript:NextImage("+(id+1)+")");
    document.getElementById("cimage").src = imgs[id];
}
if(id==0){
    document.getElementById("prevurl").style.visibility = 'hidden';
    document.links.item("prevurl").setAttribute("href","javascript:PrevImage("+(id-1)+")");
    document.getElementById("cimage").src = imgs[id];
}
}


Ну и кусочек из HTML:
Код

<center><img id="cimage" src="1.jpg" width=400 height=550><br>
<a href="javascript:PrevImage(0)" id="prevurl" style="visibility:hidden;">Предыдущая</a> <a href="javascript:NextImage(1)" id="nexturl">Следующая</a></center>

В Opera и IE всё прекрасно работает, в FireFox id передаётся каряво, не могу понять почему. Может кто-нибудь объяснить, что особенного такого в этом FF и как эту особенность учесть? smile 
Спасибо.

Автор: bars80080 10.7.2010, 11:18
почему бы вот такие штуки 
 document.links.item("prevurl")

не заменить на более кошерные, которые ты тут же и используешь:
document.getElementById("prevurl")


links - вообще-то коллекция элементов (устарвешая), и её надо ещё указывать порядковый элемент links[0]
но лучше вообще её не использовать

Автор: SlePoY_SniPeR 10.7.2010, 20:01
bars80080, последовал вашему совету. Подправил. Всё работает, как и работало: в Opera и IE8 всё хорошо, а Mozilla с ума сходит. Так что проблема этим, к сожалению, не решена, но я приму к сведению то, что про links лучше начать забывать.

Попробую подробнее описать проблему:
как должно работать: (и как собственно работает в Opera и IE8)
изображение в большом разрешении, под ним 2 ссылки: "предыдущая" и "следующая". По каждой кнопке соответственно происходит переключение на другое изображение. ID конкретной картинки  передаётся в изменяемой ссылке (см пост №1). Так вот в выше перечисленных браузерах всё происходит как положено: при загрузке страницы загружена 1ая картинка из массива, ссылка "Предыдущая" спрятана, на ссылке "Следующая" значение href="javascript:NextImage(1)". При нажатии на ссылку появляется "Предыдущая" со значением тега а javascript:PrevImage(0) и href ссылки "Следующая" меняется на "javascript:NextImage(2)".
Что происходит в FireFox: При загрузке страницы всё как положено, но при нажатии кнопки "Следующая" значения, передаваемые в функцию NextImage() и PrevImage() берутся откуда-то... свыше чтоли.. А именно:
Код

<a href="javascript:PrevImage(2)" id="prevurl">Предыдущая</a>
<a href="javascript:NextImage(1)" id="nexturl">Следующая</a>

Ну и далее "Предыдущая" будто бы стала "Следующей", а вот "Следующая" "Предыдущей не стала", так и остаётся параметр передаваемый = 1 )))))
В общем, мой мозг где-то далеко, помогите его вернуть...  smile 

Автор: bars80080 11.7.2010, 01:31
ну, может быть, такой простой заменой чего-то не втыкается.
самое простое было бы вообще избавиться от значения в функции и не менять атрибуты. просто ввести переменную, которой назначить значение равное порядковому номеру текущей картинки. жмём PrevImage(), вычитаем единицу, и запускаем функцию, которая показывает картинку с текущим номером. жмём NextImage, прибавляем единицу, и тоже запускаем функцию, которая показывает картинку с текущим номером. погасить ссылки в крайних положениях труда не составит. 

Автор: SlePoY_SniPeR 11.7.2010, 11:56
Так я и сделал. Во всех браузерах действительно всё заработало. Правда теперь появилась немного другая проблема, но она уже касается моей конкретной задачи, а не топика этого форума.
bars80080, благодарю за помощь!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)