немного непростой GetElementById

Alx

Новичок
немного непростой GetElementById

Доброго!

Подскажи плз в чём грабли. Есть следующая конструкция:

PHP:
var i;
for (i=1; i<=10; i++) {
document.getElementById('r'+i).style.display = 'none';
}
Обработчик ругается что: document.getElementById("r" + i) has no properties. Почему конструкция ("r" + i) не заменяется на (r1), (r2), ..., (r10)?
 

Линка

Новичок
Alx
используй eval
var i;
for (i=1; i<=5; i++) { ;
eval("document.getElementById('r"+i+"').style.display = 'none'; ");
}


Функция eval("строка") преобразует строку в выражение и если выражение с точки зрения JavaScript синтаксически правильно - то выполняет его как команду.
 

Alexandre

PHPПенсионер
а так?
PHP:
var i; 
for (i=1; i<=10; i++) { 
id = 'r'+i;
alert( id );
document.getElementById( id ).style.display = 'none'; 
}
 

Alx

Новичок
Спасибо за комменты.

Линка
Теперь выпадает ошибка: r1 is not defined. Хотя элемент
<td id="r1"> есть настранице.

Alexandre
Ваш вариант выдаёт следующее: document.getElementById(id) has no properties. Я, к сожалению, в синтаксисе javascript ещё не силён, но похоже что именно с ним что-то перепутано. Причём алерт выскакивает с правильным id. Может с ковычками чего-нить?
 

Crazy

Developer
Re: немного непростой GetElementById

Автор оригинала: Alx
Обработчик ругается что: document.getElementById("r" + k) has no properties. Почему конструкция ("r" + k) не заменяется на (r1), (r2), ..., (r10)?
Код:
<p id="r1">R1</p>
<p id="r2">R2</p>
<p id="r3">R3</p>
<p id="r4">R4</p>
<script>
var i;
for (i=1; i<=3; i++) {
document.getElementById('r'+i).style.display = 'none';
}
</script>
Все работает.

А ругается потому, что НЕТ элемента с указанным id.
 

kruglov

Новичок
Эээ... Все должно заменяться, evalы и пр. не нужны.

У вас не работает именно указанный пример?
 

Alx

Новичок
Немного переделал вариант Линка следующим образом:
Код:
eval("document.getElementById(r"+i+").style.display = 'none'; ");
и теперь выскакивает другая ошибка (в моём предыдущем посте)

kruglov,
не работает следующая функция:
Код:
function showRoom() {
 var nbR = document.myForm.rooms[document.myForm.rooms.selectedIndex].value;
 var i;
 for (i=2; i<=10; i++) {
  document.getElementById('r'+i).style.display = 'none';
 }

 for (i=2; i<=nbR; i++) { 
document.getElementById('r'+i).style.display = '';
 }
}
-~{}~ 16.02.06 23:24:

Автор оригинала: Линка
eval("document.getElementById('r"+i+"').style.display = 'none'; ");

Больше никогда не кури эту траву.
Crazy
зря ты так :)

ещё немного поправил этот вариант:
Код:
eval("document.getElementById('r"+i+"').style.display = 'none'; ");
и всё заработало. Странно ли? Надеюсь, этот скрипт не даст сбоев..
 

Crazy

Developer
Alx, из твоего примера никак не следует, что действительно существуют элементы r# с нужными цифирками.
 

Alx

Новичок
Crazy, есть там табличка с такими вот строками: <td id="r1"> (я выше упоминал об этом).

Всем спасибо за комменты! Линка, спасибо за наводку! :)
 

Crazy

Developer
Alx, еще раз:

1. У тебя есть цикл по i от 2 до 10.
2. У тебя есть цикл по i от 2 до неизвестного nbR.

При этом ты привел пример кода, где есть только r1. Строим полный код и видим, что ничто не ломается:

Код:
<table>
  <tr>
    <td id="r1">R1</td>
    <td id="r2">R2</td>
    <td id="r3">R3</td>
    <td id="r4">R4</td>
    <td id="r5">R5</td>
    <td id="r6">R6</td>
    <td id="r7">R7</td>
    <td id="r8">R8</td>
    <td id="r9">R9</td>
    <td id="r10">R10</td>
  </tr>
</table>
<script>
function showRoom() {
 var nbR = document.myForm.rooms[document.myForm.rooms.selectedIndex].value;
 var i;
 for (i=2; i<=10; i++) {
  document.getElementById('r'+i).style.display = 'none';
 }

 for (i=2; i<=nbR; i++) { 
   document.getElementById('r'+i).style.display = 'block';
 }
}
</script>
<form name="myForm">
  <select name="rooms">
    <option code="4">4</option>
    <option code="8">8</option>
  </select>
  <button onClick="showRoom()">showRoom</button>
</form>
 

Линка

Новичок
Crazy
таки да. твой вариант понятнее и проще
(один в один как у топик стартера)
ошибка у автора топика была не в скрипте а из-за отсутствия элементов с нужным id
p.s. eval-> курить можно , но не втягу :)
 
Сверху