Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: В Opera не работает функция
Форумы портала PHP.SU » Клиентская разработка » JavaScript & VBScript » В Opera не работает функция

Страниц (1): [1]
 

1. zusicks438 - 29 Августа, 2012 - 13:34:05 - перейти к сообщению
Всем доброго времени суток.

Собственно, есть кучка картинок. При нажатии на одну из картинок передаем в функцию URL видео и собственно сам объект (через this). При этом функция вставляет URL в блок "video", а рамка у родительского элемента (структура такая: <li><img></li>, то есть рамка у li) меняется с зеленой на красную. Если тыкаем по другой картинке, то рамка у прошлой картинки снова становится зеленой, а у новой - красной.

Проблема как раз в смене цвета рамки. Вот код функции:
CODE (javascript):
скопировать код в буфер обмена
  1. <script>
  2.         function replace(code, idnt) {
  3.         video.innerHTML=code;
  4.         if (parent)
  5.         parent.className = "green";
  6.         var actual = document.getElementById(idnt.id);
  7.         parent = actual.parentNode;
  8.         parent.className = "red";
  9.         }
  10. </script>
  11. <script>
  12.         var parent;
  13. </script>

В результате все замечательно работает в IE и Firefox, а вот в Opera цвет рамки не меняется. При этом если мне нужно просто сделать красную рамку, то вот такой код работает:
CODE (javascript):
скопировать код в буфер обмена
  1. <script>
  2.         function replace(code, idnt) {
  3.         video.innerHTML=code;
  4.         var actual = document.getElementById(idnt.id);
  5.         var parent = actual.parentNode;
  6.         parent.className = "red";
  7.         }
  8. </script>


Я не пойму никак...то ли Opera как-то иначе работает с глобальными переменными, то ли я просто чего-то не знаю. Пожалуйста, помогите Улыбка
2. IllusionMH - 29 Августа, 2012 - 13:43:59 - перейти к сообщению
zusicks438, и где эта переменная должна задаваться, чтобы условие сработало?
ссылку на пример
3. zusicks438 - 29 Августа, 2012 - 13:57:21 - перейти к сообщению
IllusionMH пишет:
и где эта переменная должна задаваться, чтобы условие сработало

CODE (javascript):
скопировать код в буфер обмена
  1. parent = actual.parentNode;

Так вот же. Условие истинно всегда, кроме первого раза. В принципе если в объявлении parent что-нибудь присвоить, то можно вообще без этого условия.

Суть еще и в том, что если переменная глобальная, то в Opera не работает даже вот это:
CODE (javascript):
скопировать код в буфер обмена
  1. parent = actual.parentNode;
  2.         parent.className = "red";

Хотя если сделать локальную, то все работает:
CODE (javascript):
скопировать код в буфер обмена
  1. var parent = actual.parentNode;
  2.         parent.className = "red";
4. tuareg - 29 Августа, 2012 - 14:19:19 - перейти к сообщению
zusicks438 Мне нравится, Вас просят ссылку, Вы выкладываете код. Поймите правильно, Вы выложили js код, но м.б косяк и в HTML нужен именно пример Улыбка
5. zusicks438 - 29 Августа, 2012 - 14:23:58 - перейти к сообщению
tuareg,
да я понимаю, не самая правильная реакция на просьбу, но надеялся, что все же получится обойтись кодом,
но до меня тут методом тыка дошло, в чем дело. Судя по всему Opera уже где-то использует переменную "parent" в служебных целях. Поменял название переменной на "vparent" и все заработало Улыбка

 

Powered by ExBB FM 1.0 RC1