код в 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, время: 06:12. |