Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   getElementById() не возвращает ссылку на елемент (https://javascript.ru/forum/misc/22453-getelementbyid-ne-vozvrashhaet-ssylku-na-element.html)

Lehin 20.10.2011 11:20

getElementById() не возвращает ссылку на елемент
 
Доброго времени суток.
только начинаю разбираться с javascript и вот возникла проблема.
Есть страничка на сайте joomla в ней есть структура, которая состоит из вложенных табов и слайдеров. в каждом слайдере есть таблицы выводимые php скриптом
<?php
//переменные
$pricesArray = array("price1"=>1,"price2"=>1,"price3"=>1,"price4"=>1,"price5"=>1,"price6"=>1);
//cтили
echo '
<style type="text/css">
@import url("./myscrypts/local.css");
</style>
';
//Таблица
echo "<form name =\"ovs\" ><table class=\"price\" cellspacing=\"0\">";
//Названия групп колонок таблицы
echo "
<tr class=\"price\" >
<td class=\"price\" id=head>3</td>
<td class=\"price\" id=head colspan=\"3\">1</td>
</tr>
";
//Название колонок таблицы
echo "
<tr class=\"price\" >
<td class=\"price\" id=\"colname\" id=id=\"colname\"> 2</td>
<td class=\"price\" id=\"cost\" colspan=\"2\"></td>
<td class=\"price\" id=\"cost\">Количество(шт)</td>
</tr>
";
//1я строка таблицы
echo "
<tr class=\"price\" >
<td class=\"price\" id=\"colname\" id=id=\"colname\"> 1</td>
<td class=\"price\" id=\"cost\">".$pricesArray["price1"]."</td>
<td class=\"price\" id=\"cost\"><input id=\"btn1\" class=\"button\" type=\"button\" value=\"Добавить\" /><input id=\"btn7\" class=\"button\" type=\"button\" value=\"Убрать\"/></td>
<td class=\"price\" id=\"cost\"><input id=\"qty1\" type=\"text\" value=\"0\"/></td>
</tr>
";
// еще куча строк
echo'</table>
<input type="button" value="Посчитать" onclick="ovsFindSumm()" style="margin-top:10px;"/><input type="reset" value="Сбросить" onclick="ovsResetSumm()" style="margin-top:10px;"/>
<div id="finalCount" style="margin-left:5px;margin-top:6px;">Итого:</div>
</form>';?>

и собственно обрабатывается скриптом
<script language="javascript" type="text/javascript">
function ovsCheck(field)
{
var result = false;
var val;
if (field.value == ''){
alert('Как так, вы же ничего не ввели');
return result;

}
val = parseInt(field.value);
if (isNaN(val)){
alert('Не пытайтесь обмануть, это не число!');
return result;
}
if (val != field.value){
alert('Не пытайтесь обмануть, это не число!');
return false;
}
if (val < 0){
alert('Мы - за движение вперед! Введите положительное а не отрицательное число!');
return result;
}
result=true;
return result;
}

function ovsResetSumm()
{
document.ovs.getElementById('finalCount').innerHTML="Итого:";
}

function ovsFindSumm(){
var summ=0;
var prices = [<?php echo "{$pricesArray["price1"]},{$pricesArray["price2"]},{$pricesArray["price3"]},{$pricesArray["price4"]},{$pricesArray["price5"]},{$pricesArray["price6"]}";?>]

for( var i=0;i<6;i++)
{
var index=i+1;
var quant = document.ovs.getElementById('qty'+index);
summ+=prices[i]*Number(quant.value);
}
document.ovs.getElementById('finalCount').innerHTML="Итого: "+summ;
}
function ovsAddItem()
{
var index=0;
if(this.id=='btn1'){ index=1;}
if(this.id=='btn2'){ index=2;}
if(this.id=='btn3'){ index=3;}
if(this.id=='btn4'){ index=4;}
if(this.id=='btn5'){ index=5;}
if(this.id=='btn6'){ index=6;}
if(index>0&&index<7)
{
var quant = document.ovs.getElementById('qty'+index.toString());
var x=ovsCheck(quant);
if(x==true)
{
quant.value=Number(quant.value)+1;
}
}
}
function ovsDelItem()
{
var index=0;
if(this.id=='btn7'){ index=1;}
if(this.id=='btn8'){ index=2;}
if(this.id=='btn9'){ index=3;}
if(this.id=='btn10'){ index=4;}
if(this.id=='btn11'){ index=5;}
if(this.id=='btn12'){ index=6;}
if(index>0&&index<7)
{
var quant = document.ovs.getElementById('qty'+index.toString());
var x=ovsCheck(quant);
if(x==true&&Number(quant.value)>0)
{
quant.value=Number(quant.value)-1;
}
}
}

var buttonAdd1 = document.ovs.getElementById('btn1');
... еще пара подобных
var buttonDel1 = document.ovs.getElementById('btn7');
... еще пара подобных
buttonAdd1.onclick = ovsAddItem; 
buttonDel1.onclick = ovsDelItem;
... еще пара подобных
</script>

Проблема заключается в том что есть точно такая же таблица в другом табе и обрабатывается точно также отличается все это дело именем формы вместо ovs -> om и определения функций начинаются соответственно с om.
При попытке обратиться к элементам формы om путем
var ombuttonAdd1 = document.om.getElementById('btn1');
функция не работает хотя если обращаться через document.om.elements[id_для_btn1].id то элемент виден.
Не пойму в чем ошибка. Если возможно подскажите новичку :)

monolithed 20.10.2011 17:32

document.getElementsByName('ovs')[0];

Lehin 21.10.2011 08:37

Цитата:

Сообщение от monolithed (Сообщение 131980)
document.getElementsByName('ovs')[0];

Не совсем понял, что имелось в виду. Обращаться к форме через getElementsByName ? чем этот способ отличается от document.имя_формы ?
:) а то что то разум молчит, пойду у гугля спрошу

Lehin 21.10.2011 09:04

при обращении к
<input id=\"btn1\" class=\"button\" type=\"button\" value=\"Добавить\" />

в форме c именем name="om" при помощи
document.om.getElementById('btn1') он же document.getElementsByName('om')[0].getElementById('btn1')

все равно выдает false;
при попытке вывести alert(document.om.getElementById('btn1').id); выдает undefined
:blink: Не ужели id кнопок должны быть уникальными для всего документа, а не только для области формы в которой они находятся?:-?

dmitriymar 21.10.2011 11:10

Цитата:

Сообщение от Lehin
Не ужели id кнопок должны быть уникальными для всего документа, а не только для области формы в которой они находятся?

Именно так id уникально. А по поводу остального-вам нужно изучить основы,чтоб не писать чёртичто и удивляться почему это не работает.

Lehin 21.10.2011 12:03

Цитата:

Сообщение от dmitriymar (Сообщение 132057)
Именно так id уникально. А по поводу остального-вам нужно изучить основы,чтоб не писать чёртичто и удивляться почему это не работает.

в javascript уникальность не состоит из "имя_form.имя_id"? :blink:
исходя из того что я уже успел прочесть то в формах с разными именами по идее могут быть одинаковые id -__- вы говорите обратное, я запутался.

B@rmaley.e><e 21.10.2011 12:15

id вообще никакого отношения к формам не имеет. id уникален во всём документе, а для обращения по нему нужно использовать document.getElementById.
Цитата:

Сообщение от Lehin
java

Java в другом месте, тут JavaScript.

Lehin 21.10.2011 12:21

Цитата:

Сообщение от B@rmaley.e><e (Сообщение 132065)
Java в другом месте, тут JavaScript.

опечатался :)
P.S. Спасибо


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