проблема в глобальной переменной

SHad-X

Новичок
проблема в глобальной переменной

PHP:
<script language="JavaScript">
  var tid2;
   function fun(tid) {
    document.getElementById(tid).style.background = "#E6F099";
    document.getElementById(tid2).style.background = "#B4E0C1";
    tid2=tid;
      }
 </script>
</head>
<body>
<?php
   $id = 1;
   $id2 = 2;
   $id3 = 3;
echo '
<table width="30%" border="1" cellspacing="0" cellpadding="0" height="" bgcolor="#B4E0C1" id = "tabl">
  <tr height="30" id = "'.$id.'">
    <td><A HREF="#" onClick="fun('.$id.')">тест</td>
    <td>тест</td>
  </tr>
  <tr height="30" bgcolor="#B4E0C1" id = "'.$id2.'">
    <td><A HREF="#" onClick="fun('.$id2.')">тест</td>
    <td>тест</td>
  </tr>
  <tr height="30" id = "'.$id3.'">
    <td><A HREF="#" onClick="fun('.$id3.')">тест</td>
    <td>тест</td>
  </tr>
</table>
         ';
?>
не могу понять, почему глобальная переменная tid не сохраняется... я хочу чтобы при кликании по одной строке она выделялась другим цветом, а при следующем кликании уже по другой строке, предыдущая строка должна принять предний цвет...
 

SelenIT

IT-лунатик :)
Потому что при клике страница перегружается. Чтобы этого избежать, нужно добавить в onclick return false. И, судя по приведенному коду, с самими id-ами в итоге не все ладно.
 

SHad-X

Новичок
можно немного поточнее... куда добавить return false? так:
onClick="fun('.$id.') return false">
и что не так с id? вроде все в порядке, я проверял...
 

SelenIT

IT-лунатик :)
Так, только перед ним точку с запятой добавь.
Насчет id: по спецификации CSS2 id-ы не могут начинаться с цифры, могут быть проблемы с кроссбраузерностью. Хотя если проверял как следует и везде работает - это не столь критично.
 

bkonst

.. хочется странного?...
Потому что при клике страница перегружается.
С HREF="#" ?!

по спецификации CSS2 id-ы не могут начинаться с цифры, могут быть проблемы с кроссбраузерностью. Хотя если проверял как следует и везде работает - это не столь критично.
Скорее всего, поэтому и не работает.
 

SHad-X

Новичок
не понимаю... все равно не работает! уже все перепробовал! а можно просто сбросить те настройки которые делались JavaScript? чтобы выполнился только HTML... причем сделать так, чтобы страница не перезагружалась!

-~{}~ 05.02.06 12:50:

С HREF="#" --- и что не так с этим? это чтобы была ссылка, то есть можно было щелкать мышкой, но не переходила на другую страницу...
 

SelenIT

IT-лунатик :)
Сорри, я действительно ошибся - вот что значит не проверил. Корень зла оказался в том, что при первом вызове ф-ции tid2 попросту не определена, поэтому нет элемента с таким id-ом, и функция вылетает с ошибкой. Как вариант "лекарства" - проверять, определена ли переменная:
PHP:
if (tid2) document.getElementById(tid2).style.background = "#B4E0C1";
А чтобы при клике по ссылке не было перехода куда бы то ни было, как раз и используется "return false" в onclick-е. Переход по #, если не отменить его с помощью "return false" тоже может быть помехой - хотя бы в случае, когда ссылка находится в низу длинной страницы.
 

baev

‹°°¬•
Команда форума
HREF="#" --- и что не так с этим? это чтобы была ссылка, то есть можно было щелкать мышкой, но не переходила на другую страницу...
Адрес-то меняется, вот и переход.

Ставьте href=""
 

SelenIT

IT-лунатик :)
baev, разве в адресе дело? Кстати, href="" совершенно дико (на мой взгляд) ведет себя в IE.
 

baev

‹°°¬•
Команда форума
А на мой взгляд — «дико ведёт» как раз "#".

Никогда не наблюдали в тайтле окна строку из «решёток»?
 

SelenIT

IT-лунатик :)
baev
Не смог воспроизвести. Если не трудно, напомните пожалуйста, при каких условиях этот глюк возникает?

В любом случае, имхо, строка из решеток в адресе - меньшее зло по сравнению с неожиданным переходом в текущий каталог в случае href="" в IE.
 

baev

‹°°¬•
Команда форума
SelenIT, блин, неделю назад чужой код исправлял — там это и выдавалось — а сейчас воспроизвести не могу...
Извините.

(Простейший код, в принципе, был. Видимо, дримвивером сгенерённый — поп-ап большой картинки из тумбнейла.
В фаерфоксе работало, а в IE — нет. Именно с перезагрузкой «родителя» и добавлением октоторпа.)

P.S. RFC глянул:
4.2. Same-document References

A URI reference that does not contain a URI is a reference to the
current document. In other words, an empty URI reference within a
document is interpreted as a reference to the start of that document,
and a reference containing only a fragment identifier is a reference
to the identified fragment of that document. Traversal of such a
reference should not result in an additional retrieval action.
— пустая ссылка, вроде как адекватна, а «решётка» — указатель «в никуда»...
(http://www.ietf.org/rfc/rfc2396.txt)
 

SelenIT

IT-лунатик :)
baev
Да я вот тоже никак не ждал сюрпризов от пустой ссылки. Но буквально на прошлой неделе коллега ткнул меня в то, что в IE оно как-то не так: в action формы - грузит текущую страницу, но в href ссылки без указания target'а... теряет имя файла и отправляет в текущий каталог! А если задать ссылке target="_blank" - и вовсе открывает окно с about:blank. Не думаю, что такое поведение адекватно, тем более что в FF во всех трех случаях все единообразно. С "решеткой" IE такого себе, кажется, "не позволяет".

Но все это, имхо, мало относится к проблеме SHad-X, ведь return false предотвратит переход независимо от адреса ссылки, если JavaScript отработает без ошибки. Разве не так?
 
Сверху