Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.03.2011, 23:07
Новичок на форуме
Отправить личное сообщение для Rich Посмотреть профиль Найти все сообщения от Rich
 
Регистрация: 25.03.2011
Сообщений: 7

код в 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.

Сам исправить не могу, помогите
Ответить с цитированием
  #2 (permalink)  
Старый 27.03.2011, 03:19
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

при подключении файла элемента с id "equip"ещё не существует.
положи этот же код в хеде в тегах скрипт -выбросит туже ошибку
Ответить с цитированием
  #3 (permalink)  
Старый 27.03.2011, 09:48
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Rich, вы уже достали. С какого * ваш вопрос относится к разделу Сайт Javascript.ru?

PS: последний раз переношу ваш пост!
Ответить с цитированием
  #4 (permalink)  
Старый 27.03.2011, 13:19
Новичок на форуме
Отправить личное сообщение для Rich Посмотреть профиль Найти все сообщения от Rich
 
Регистрация: 25.03.2011
Сообщений: 7

Дорогой 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 я не скажу что чайник, но до гуру, мне так далеко как от земли до звёзд.

Последний раз редактировалось Rich, 27.03.2011 в 13:22.
Ответить с цитированием
  #5 (permalink)  
Старый 27.03.2011, 13:34
Новичок на форуме
Отправить личное сообщение для Rich Посмотреть профиль Найти все сообщения от Rich
 
Регистрация: 25.03.2011
Сообщений: 7

Так у меня изначально код и располагался в хедах <head> между тегами <script type="text/javascript">код</javascript></head> и всё работало. Одно было неудобство, при открытии страницы сразу генерироваласть таблица и т.д. Поэтому я и решил вставить код в файл с расширением *.js И теперь при вызове фунции, таблица генерируется, но подсчёт количества элементом и сумма не работает.
Вы бы лучше помогли кодом, потому как я сам разобраться не могу.

Последний раз редактировалось Rich, 27.03.2011 в 13:37.
Ответить с цитированием
  #6 (permalink)  
Старый 27.03.2011, 13:35
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

n_equipment-не существует это раз. может он и внешней -но задумайтесь о последовательности что за чем выполняется.

Последний раз редактировалось dmitriymar, 27.03.2011 в 13:41.
Ответить с цитированием
  #7 (permalink)  
Старый 27.03.2011, 14:40
Новичок на форуме
Отправить личное сообщение для Rich Посмотреть профиль Найти все сообщения от Rich
 
Регистрация: 25.03.2011
Сообщений: 7

Дорогой 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.
Понимаю в том, что вы направляете меня по правильному пути.
А не понимаю в том, что или торможу, или не хватает знаний.
Ответить с цитированием
  #8 (permalink)  
Старый 27.03.2011, 14:59
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

скрипт подключается стоит посмотреть на последовательность-чтобы он подключался позже того момента когда будет создан массив.
Ответить с цитированием
  #9 (permalink)  
Старый 28.03.2011, 23:22
Новичок на форуме
Отправить личное сообщение для Rich Посмотреть профиль Найти все сообщения от Rich
 
Регистрация: 25.03.2011
Сообщений: 7

По всякому развлекался, но не получается. Вот куски кода...
<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 таблицы, но перебор элементов в таблице не происходит. Причина по которой я не могу найти ошибку или внести изменения в код, банальна, нет достаточных для данной работы знаний. Я это делаю для себя, не для кого-нибудь. Поэтому прошу, люди добрые помогите
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Doctype и javascript: не работает событие в Internet exproler nastya Internet Explorer 0 23.03.2011 12:26
Последние книги по JavaScript! monolithed Учебные материалы 7 26.10.2010 19:40
Выдвет ошибку JavaScript Ромио Opera, Safari и др. 4 21.10.2010 20:34
Динамическая HTML форма (FireFox - работает, IE - не работает) dm1tr1y Общие вопросы Javascript 10 11.12.2009 15:59
JS меню работает на обычной html странице, а на юкозовском движке нет. adware Я не знаю javascript 10 16.05.2009 16:48