код в HTML работает, но не работает в JavaScript
var strTab = "<table id='equip' border='2' ><tr>"
strTab += "<th> Тип </th><th width=100px> Наименование </th><th width=80px> Цена </th><th width=65px> Кол-во </th><th width=100px >"
strTab += "Всего </th><th width=550px > Описание </th>"
for(var i = 0; i <= n_equipment.length - 1; i ++)
{
vss = parseFloat(1 * (n_equipment[i].price));
strTab += "<TR><TD>" + n_equipment[i].t_equipment.name + "</TD><TD align=left >" + n_equipment[i].name
strTab += "</TD><TD align=center >" + n_equipment[i].price + "</TD><TD align=center >" + n_equipment[i].count
strTab += "</TD><TD align=center >" + n_equipment[i].vsego + "</TD><TD><h5>" + n_equipment[i].description + "</h5></TD></TR>"
}
strTab += "</table>"
comm.document.write(strTab);
//******************************************************************
// Подсчёт количества элементов
var col = 0;
var count_col = new Array();
alert();
for( var i = 1; i < document.getElementById("equip").rows.length; i ++)
{
count_col = parseInt(document.getElementById("equip").rows[i].cells[3].innerHTML);
col += count_col;
}
strTab = "<table border='2' ><tr>"
strTab += "<tr><td align='right' width='495px' >Кол-во: " + col + "</td></tr>"
strTab += "</table>"
comm.document.write(strTab);
Если код вставить в HTML файл между тегами <javascript> </javascript> работает, но если код находится в js файле то код не работает. Ошибка в строке 21 текст ошибки в мозиле document.getElementById("equip") is null а гугле Uncaught TypeError: Cannot read property 'rows' of null в сафаре ошибка в строке 30 Result of expression 'comm.document' [null] is not an object. в опере ошика в строке 21 Uncaught exception: TypeError: Cannot convert 'document.getElementById("equip")' to object. Сам исправить не могу, помогите |
при подключении файла элемента с id "equip"ещё не существует.
положи этот же код в хеде в тегах скрипт -выбросит туже ошибку |
Rich, вы уже достали. С какого * ваш вопрос относится к разделу Сайт Javascript.ru?
PS: последний раз переношу ваш пост! |
Дорогой dmitriymar , почему вы считаете что элемента с id "equip" не существует. В данном коде он есть в строке 1.
var strTab = "<table id='equip' border='2' ><tr>"
strTab += "<th> Тип </th><th width=100px> Наименование </th><th width=80px> Цена </th><th width=65px> Кол-во </th><th width=100px >"
strTab += "Всего </th><th width=550px > Описание </th>"
for(var i = 0; i <= n_equipment.length - 1; i ++)
{
vss = parseFloat(1 * (n_equipment[i].price));
strTab += "<TR><TD>" + n_equipment[i].t_equipment.name + "</TD><TD align=left >" + n_equipment[i].name
strTab += "</TD><TD align=center >" + n_equipment[i].price + "</TD><TD align=center >" + 1/*n_equipment[i].count*/
strTab += "</TD><TD align=center >" + vss/*n_equipment[i].vsego*/ + "</TD><TD><h5>" + n_equipment[i].description + "</h5></TD></TR>"
}
strTab += "</table>"
comm.document.write(strTab);
//******************************************************************
// Подсчёт количества элементов
var col = 0;
var count_col = new Array();
for( var i = 1; i < document.getElementById("equip").rows.length; i ++)
{
count_col = parseInt(document.getElementById("equip").rows[i].cells[3].innerHTML);
col += count_col;
}
strTab = "<table border='2' ><tr>"
strTab += "<tr><td align='right' width='495px' >Кол-во: " + col + "</td></tr>"
strTab += "</table>"
comm.document.write(strTab);
//******************************************************************
// Подсчёт итоговой суммы
var vs = 0;
var count_vs = new Array();
for( var i = 1; i < document.getElementById("equip").rows.length; i ++)
{
count_vs = parseFloat(document.getElementById("equip").rows[i].cells[2].innerHTML);
vs += count_vs;
//alert(vs);
}
strTab = "<table 'border='2' ><tr>"
strTab += "<tr><td align='right' width='600px' > Итого стоимость оборудования: " + vs + " руб.</td></tr>"
strTab += "</table> \п"
comm.document.write(strTab);
Если вам не сложно помогите, в javascript я не скажу что чайник, но до гуру, мне так далеко как от земли до звёзд. |
Так у меня изначально код и располагался в хедах <head> между тегами <script type="text/javascript">код</javascript></head> и всё работало. Одно было неудобство, при открытии страницы сразу генерироваласть таблица и т.д. Поэтому я и решил вставить код в файл с расширением *.js И теперь при вызове фунции, таблица генерируется, но подсчёт количества элементом и сумма не работает.
Вы бы лучше помогли кодом, потому как я сам разобраться не могу. |
n_equipment-не существует это раз. может он и внешней -но задумайтесь о последовательности что за чем выполняется.
|
Дорогой dmitriymar, я вас и понимаю и не понимаю. Если n_equipment не существует, то почему генерируется таблица из массива
var n_equipment = new Array(); значения массива n_equipment Что касается последовательности, то сначала у меня создаются объекты массивы, далее идёт генерация таблицы из данных массива var n_equipment = new Array(); строки кода 01...13, далее идёт подсчёт количества var n_equipment = new Array(); строки кода 17...29, а затем суммы var n_equipment = new Array(); строки 34...25. Понимаю в том, что вы направляете меня по правильному пути. А не понимаю в том, что или торможу, или не хватает знаний. |
скрипт подключается стоит посмотреть на последовательность-чтобы он подключался позже того момента когда будет создан массив.
|
По всякому развлекался, но не получается. Вот куски кода...
<input type="checkbox" name="installation_n" onclick="nast()"/>Наш монтаж<br> <table id="equip"> </table> <script type="text/javascript" src="file:///G:/Insyte5/commerc.js"></script> <input type="button" name="comerc_n" id="comerc_id" value="Сформировать коммерческое предложение" onclick="commerc()"/> <script type="text/javascript" src="file:///G:/Insyte5/table.js"></script> скрипт commerc.js
function t_equipment(name, type_s)
{
this.type_s = type_s;
this.name = name;
}
var a_equipment = new Array();
a_equipment[0] = new t_equipment("Логический контроллер", "logic_controllers")
a_equipment[1] = new t_equipment("Встраиваемые микромодули", "embeddable_micromodules")
function equipment(name, price, count, vsego, description, t_equipment, id)
{
this.name = name;
this.price = price;
this.count = count;
this.vsego = vsego;
this.description = description;
this.t_equipment = t_equipment;
this.id = id;
}
//equipment.id = document.getElementById("equip");
var n_equipment = new Array();
n_equipment[0] = new equipment("SPIDER2", 500, "", "", "Программируемый логический контроллер, USB, Ethernet, RS-485, RS-232, 1-Wire, 4 реле, 4 дискр. входа, 2 аналог. входа, GSM-модем, GSM-антенна, USB-кабель, DIN", a_equipment[0])
n_equipment[1] = new equipment("SPIDER", 250, "", "", "Программируемый логический контроллер, RS-485, RS-232, блок питания, кабель, DIN", a_equipment[0])
function n_montaj(names, price, vsego)
{
this.names = names;
this.price = price;
}
var montaj = new Array();
montaj[0] = new n_montaj();
montaj[1] = new n_montaj("Работы по монтажу системы", 100);
скрипт table.js
function commerc()
{
var vss = 0;
var pusk = 0;
comm = window.open("", "Автоматизация", "width = 1200px, height = 1600px, status=yes, toolbar=yes, menubar=yes", true);
comm.document.open();
comm.document.write("<h2 align='center'> Коммерческое предложение </h2>");
var strTab = "<table border='2' ><tr>"
strTab += "<th> Тип </th><th width=100px> Наименование </th><th width=80px> Цена </th><th width=65px> Кол-во </th><th width=100px >"
strTab += "Всего </th><th width=550px > Описание </th>"
for(var i = 0; i <= n_equipment.length - 1; i ++)
{
vss = parseFloat(1 * (n_equipment[i].price));
strTab += "<TR><TD>" + n_equipment[i].t_equipment.name + "</TD><TD align=left >" + n_equipment[i].name
strTab += "</TD><TD align=center >" + n_equipment[i].price + "</TD><TD align=center >" + 1/*n_equipment[i].count*/
strTab += "</TD><TD align=center >" + vss/*n_equipment[i].vsego*/ + "</TD><TD><h5>" + n_equipment[i].description + "</h5></TD></TR>"
}
strTab += "</table>"
comm.document.write(strTab);
//******************************************************************
// Подсчёт количества элементов
var col = 0;
var count_col = new Array();
for( var i = 1; i < document.getElementById("equip").rows.length; i ++)
{
count_col = parseInt(document.getElementById("equip").rows[i].cells[3].innerHTML);
col += count_col;
}
strTab = "<table border='2' ><tr>"
strTab += "<tr><td align='right' width='495px' >Кол-во: " + col + "</td></tr>"
strTab += "</table>"
comm.document.write(strTab);
//******************************************************************
// Подсчёт итоговой суммы
var vs = 0;
var count_vs = new Array();
for( var i = 1; i < document.getElementById("equip").rows.length; i ++)
{
count_vs = parseFloat(document.getElementById("equip").rows[i].cells[2].innerHTML);
vs += count_vs;
//alert(vs);
}
strTab = "<table border='2' ><tr>"
strTab += "<tr><td align='right' width='600px' > Итого стоимость оборудования: " + vs + " руб.</td></tr>"
strTab += "</table>"
comm.document.write(strTab);
//******************************************************************
// Виды работ
strTab = "<table 'border='2' ><tr>"
strTab += "<th align='center' width=40px > №: </th><th align='left' width=600px > Наименование работ "
strTab += "</th><th align='center' width=90px > Кол-во (шт.) </th><th align='center' width=80px > Цена (руб.) "
strTab += "</th><th align='center' width=100px > Сумма (руб.) </th>"
var mvs = 0;
for(var i = 1; i <= montaj.length - 1; i ++)
{
mvs = parseFloat(col * (montaj[i].price));
strTab += "<TR><TD align=center>" + i + "</TD><TD align=left>" + montaj[i].names + "</TD><TD align=center>" + col
strTab += "</TD><TD align=right>" + montaj[i].price + "</TD><TD>" + mvs + "</TD></TR>"
}
strTab += "</table>"
comm.document.write(strTab);
//******************************************************************
// Расчёт суммы пусконаладочных работ
strTab = "<table border='2'> <tr>"
strTab += "<tr><td align='left' width='645px'> Пуск и наладка составляет 15% от стоимости оборудования и монтажных работ: </td><td>"
strTab += + pusk + " руб.</td></tr>"
strTab += "</table>"
comm.document.write(strTab);
comm.document.close();
}
В итоге я смог добиться что формируются все 3 таблицы, но перебор элементов в таблице не происходит. Причина по которой я не могу найти ошибку или внести изменения в код, банальна, нет достаточных для данной работы знаний. Я это делаю для себя, не для кого-нибудь. Поэтому прошу, люди добрые помогите:write: |
| Часовой пояс GMT +3, время: 00:43. |