Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проблема с переменными (https://javascript.ru/forum/misc/2151-problema-s-peremennymi.html)

Painerman 11.11.2008 12:07

Проблема с переменными
 
Подскажите, плс, Почему

<script type="text/javascript">
function calculate() {
document.frm.pcs.value=eval(addcol1);
}
</script>
<select onchange="calculate()" size=1 name=addcol1>
<option value='10'></option>
...
</select>
<input type=text name=pcs value=0>

РАБОТАЕТ, а

<script type="text/javascript">
function calculate() {
document.frm.pcs.value=eval(addcol[1]);
}
</script>
<select onchange="calculate()" size=1 name=addcol[1]>
<option value='10'></option>
...
</select>
<input type=text name=pcs value=0>

НЕТ (когда использую массивы IE кричит нет объекта addcol.1)

Спасибо!

ZoNT 11.11.2008 12:23

пипец... кто учит такие скрипты писать?

Painerman 11.11.2008 12:25

Я javascript впервой вижу, мож сейчас не все правильно написал, но в практике с переменной addcol1 работает, а с addcol[1] нет

Snipe 11.11.2008 12:25

А можете комментарии написать к Вашим скриптам, что они делают в какой строчке (или что должны)?
Например, что должно происходить в строке document.frm.pcs.value=eval(addcol1);?

Ну и оформите пожалуйста используя теги [ JS ][ /JS ] и [ HTML ][ /HTML ]

Painerman 11.11.2008 12:49

<script type="text/javascript">

function calculate () {
var base=666;
var total=0;
total=total+eval(frm.price.value);
total=total+eval(frm.price1.value);
total=total+eval(frm.price2.value);
document.frm.add.value=total+eval(base);
}

</script>
<form name="frm" action="$PHP_SELF" method="post">
<select name='price' size=1 onchange="calculate()">
<option value='0' selected>Выберите</option>
<option value='1'>1</option>
<option value='2'>2</option>
<option value='3'>3</option>
<option value='4'>4</option>
<option value='5'>5</option>
</select>+
<br>
<select name='price1' size=1 onchange="calculate()">
<option value='0' selected>Выберите</option>
<option value='10'>10</option>
<option value='20'>20</option>
<option value='30'>30</option>
<option value='40'>40</option>
<option value='50'>50</option>
</select>+
<br>
<select name='price2' size=1 onchange="calculate()">
<option value='0' selected>Выберите</option>
<option value='100'>100</option>
<option value='200'>200</option>
<option value='300'>300</option>
<option value='400'>400</option>
<option value='500'>500</option>
</select>=
<br>
<input type="text" name=add value=666>
</form>


Ну вот это работает, а когда я использую переменные типа price[0] IE ругается "frm.price.0" - есть null или не является объектом

Painerman 11.11.2008 12:52

Ой, забыл.
При использовании списков select в форме frm к числу 666 прибавляется значение списка и вписывается в текстовое поле add той же формы.

Dmitry A. Soshnikov 11.11.2008 13:08

> Почему ... addcol1 (name=addcol1) РАБОТАЕТ, а addcol[1] (name=addcol[1]) нет

потому что квадратные скобки в JS используются для обращения к свойству объекта; вот и пытается движок вхождение addcol[1] распознать, как свойство 1 объекта addcol. Т.к. у вас нет объекта addcol, то и выдается соответствующая ошибка.

> eval(addcol[1])

не нужен здесь eval; если все-таки интересуют имена с квадратными скобками, то используйте кавычки:

document.forms['frm'].elements['addcol[1]'].value

Painerman 11.11.2008 13:35

Пасибы!
 
Спасибо за помощь и за то, что на FAQ не послали!!!


Часовой пояс GMT +3, время: 03:25.