*beez*

*beez*

+185
Репутация
20
Рейтинг
#1 [ЕСТЬ РЕШЕНИЕ] Несколько javascript на одной странице 7 августа 2013 в 21:55
Smith, если есть минутка взгляните, пожалуйста, на прикрепленные скрипты и формы в 31 и 32 сообщении
#2 [ЕСТЬ РЕШЕНИЕ] Несколько javascript на одной странице 7 августа 2013 в 21:52
простите меня что целиком код вставляю на целую страницу, но уже 9 часов пытаюсь понять почему вышеуказанный скрипт не работает одновременно с этим:

  1. <form name="form" action="" style="width:580px">
  2. <table class="my_table">
  3. <tbody><tr align="left">
  4.  
  5. <td>
  6.  
  7. Окна</td><td>
  8. <select style="width:300px" name="x1">
  9. <option value="0.85">Тройной стеклопакет </option>
  10. <option value="1">Двойной стеклопакет</option>
  11. <option value="1.27">Обычное (двойное) остекление</option>
  12. </select>
  13. </td> </tr><tr align="left"> <td>
  14. Стены</td><td>
  15. <select style="width:300px" name="x2">
  16. <option value="0.85">Хорошая теплоизоляция</option>
  17. <option value="1">Два кирпича или 150 мм утеплителя</option>
  18. <option value="1.27">Плохая теплоизоляция</option>
  19. </select>
  20. </td> </tr><tr align="left"> <td>
  21. Соотношение площадей окон и пола</td><td>
  22. <select style="width:300px" name="x3">
  23. <option value="0.8">10%</option>
  24. <option value="0.9">20%</option>
  25. <option value="1">30%</option>
  26. <option value="1.1">40%</option>
  27. <option value="1.2">50%</option>
  28. </select>
  29. </td> </tr><tr align="left"> <td>
  30. Температура снаружи помещения</td><td>
  31. <select style="width:300px" name="x4">
  32. <option value="0.7">-10C</option>
  33. <option value="0.9">-15C</option>
  34. <option value="1.1">-20C</option>
  35. <option value="1.3">-25C</option>
  36. <option value="1.5">-30C</option>
  37. <option value="1.7">-35C</option>
  38. </select>
  39. </td> </tr><tr align="left"> <td>
  40. Число стен выходящих наружу</td><td>
  41. <select style="width:300px" name="x5">
  42. <option value="1">Одна</option>
  43. <option value="1.2">Две</option>
  44. <option value="1.3">Три</option>
  45. <option value="1.4">Четыре</option>
  46. </select>
  47. </td> </tr>
  48.  
  49. <tr align="left"> <td>
  50. Тип помещения над рассчитываемым</td><td>
  51. <select style="width:300px" name="x6">
  52. <option value="0.8">Обогреваемое помещение</option>
  53. <option value="0.9">Теплый чердак</option>
  54. <option value="1">Холодный чердак</option>
  55. </select>
  56. </td> </tr><tr align="left"> <td>
  57. Высота помещения</td><td>
  58. <select style="width:300px" name="x7">
  59. <option value="1">2,5 метра</option>
  60. <option value="1.05">3 метра</option>
  61. <option value="1.1">3,5 метра</option>
  62. <option value="1.15">4 метра</option>
  63. <option value="1.2">4,5 метра</option>
  64. </select>
  65. </td> </tr><tr align="left"> <td>
  66. Площадь помещения </td><td>
  67. <input style="width:290px" type="text" name="x8">
  68. </td> </tr>
  69.  
  70. <tr align="center"> <td colspan="2">
  71. <input type="button" name="Button" value="Рассчитать" onclick="
  72. yyy.value=0.1*x1.value*x2.value*x3.value*x4.value*x5.value*x6.value*x7.value*x8.value+' кВт';
  73. ttt.value=(0.1*x1.value*x2.value*x3.value*x4.value*x5.value*x6.value*x7.value*x8.value)*1.2+' кВт'
  74. ">
  75. </td> </tr><tr id="my_color" align="left"> <td>
  76. Теплопотери</td><td>
  77. <input style="width:290px" type="text1" name="yyy">
  78.  
  79. </td> </tr><tr id="my_color" align="left"> <td>
  80. Теплопроизводительность котла</td><td> <input style="width:290px" type="text1" name="ttt"></td>
  81.  
  82. </tr>
  83. </tbody></table>
  84. </form>
#3 [ЕСТЬ РЕШЕНИЕ] Несколько javascript на одной странице 7 августа 2013 в 21:51

ничего нет.

lokanaft
то есть ничего нет? это же, как понимаю функции вывода значений в ячейки в зависимости от .sqm.value и .P.value

вот весь код калькулятора скрипт + форма калькулятора

  1. <script type="text/javascript" language="JavaScript">
  2.  
  3.  
  4. function usage()
  5. {
  6. if (isNaN(document.form.sqm.value) | isNaN(document.form.P.value))
  7. {
  8. alert("Введите число. В десятичных дробях нужно использовать точку вместо запятой.")}
  9. else
  10. {
  11. document.form.tiles.value=document.form.sqm.value;
  12. document.form.main_run.value=document.form.P.value;
  13. document.form.cross_tee.value=document.form.sqm.value*2.9;
  14. document.form.longer.value=Math.ceil(document.form.sqm.value*0.2);
  15. document.form.union.value=Math.ceil(document.form.sqm.value*1.7);
  16. document.form.hanger.value=Math.ceil(document.form.sqm.value*0.7);
  17. document.form.hanger_t.value=Math.ceil(document.form.sqm.value*0.7);
  18. document.form.screw1.value=Math.ceil(document.form.sqm.value*10);
  19. document.form.screw2.value=Math.ceil(document.form.sqm.value*23);
  20. document.form.band.value=document.form.sqm.value*1.2;
  21. document.form.shpak.value=document.form.sqm.value*0.4;
  22. document.form.anchor.value=Math.ceil(document.form.sqm.value*0.7);
  23. document.form.dubel.value=document.form.main_run.value*2;
  24. }}
  25.  
  26. </script>
  27.  
  28. <center>
  29. <center>
  30. <form name="form" style="width:420px">
  31. <table class="my_table">
  32. <tbody><tr>
  33. <td>Введите площадь потолка</td>
  34. <td align="center"><input type="text" size="10" maxlength="10" name="sqm"></td>
  35. <td>м<sup>2</sup></td>
  36. </tr>
  37. <tr>
  38. <td>Введите периметр потолка</td>
  39. <td align="center"><input type="text" size="10" maxlength="10" name="P"></td>
  40. <td>м</td>
  41. </tr>
  42. <tr align="center"><td colspan="5">
  43. </td></tr>
  44. <tr>
  45. <td colspan="2" align="center"><input type="button" name="submit" value="Рассчитать" onclick="usage()"></td>
  46.  
  47. </tr>
  48. </tbody></table>
  49. <table class="my_table">
  50. <tbody><tr align="left">
  51. <td>Гипсокартонный
  52. лист (м<sup>2</sup>)</td>
  53. <td><input type="text1" size="12" maxlength="12" name="tiles"></td>
  54. </tr>
  55. <tr align="left">
  56. <td>Профиль
  57. направляющий ПН-28 (п.м.)</td>
  58. <td><input type="text1" size="12" maxlength="12" name="main_run"></td>
  59. </tr>
  60. <tr align="left">
  61. <td>Профиль
  62. потолочный ПП-60 (п.м.)</td>
  63. <td><input type="text1" size="12" maxlength="12" name="cross_tee"></td>
  64. </tr>
  65. <tr align="left">
  66. <td>Удлинитель для
  67. ПП-профилей П-60 (шт.)</td>
  68. <td><input type="text1" size="12" maxlength="12" name="longer"></td>
  69. </tr>
  70. <tr align="left">
  71. <td>Соединитель
  72. одноуровневый (шт.)</td>
  73. <td><input type="text1" size="12" maxlength="12" name="union"></td>
  74. </tr>
  75. <tr align="left">
  76. <td>Подвес для
  77. ПП-профилей (шт.)</td>
  78. <td><input type="text1" size="12" maxlength="12" name="hanger"></td>
  79. </tr>
  80. <tr align="left">
  81. <td>Тяга к подвесу
  82. (шт.)</td>
  83. <td><input type="text1" size="12" maxlength="12" name="hanger_t"></td>
  84. </tr>
  85. <tr align="left">
  86. <td>Шуруп для
  87. соединения профилей
  88. (шт.)</td>
  89. <td><input type="text1" size="12" maxlength="12" name="screw1"></td>
  90. </tr>
  91. <tr align="left">
  92. <td>Шуруп 30мм (для
  93. крепления ГКЛ) (шт.)</td>
  94. <td align="center"><input type="text1" size="12" maxlength="12" name="screw2"></td>
  95. </tr>
  96. <tr align="left">
  97. <td>Лента для швов
  98. (п.м.)</td>
  99. <td><input type="text1" size="12" maxlength="12" name="band"></td>
  100. </tr>
  101. <tr align="left">
  102. <td>Шпаклевка для
  103. швов (кг)</td>
  104. <td><input type="text1" size="12" maxlength="12" name="shpak"></td>
  105. </tr>
  106. <tr align="left">
  107. <td>Анкер для
  108. крепления к потолку (шт.)</td>
  109. <td><input type="text1" size="12" maxlength="12" name="anchor"></td>
  110. </tr>
  111.  
  112. <tr align="left">
  113. <td>Дюбель для
  114. крепления ПН-профиля
  115. (шт.)</td>
  116. <td><input type="text1" size="12" maxlength="12" name="dubel"></td>
  117. </tr>
  118. </tbody></table>
  119. </form></center>
#4 [ЕСТЬ РЕШЕНИЕ] Несколько javascript на одной странице 7 августа 2013 в 21:41
lokanaft
да, уверен
тут не весь код
не стал копировать код самой формы. откуда и берутся х1,… х8

зы. ошибка не во втором скрипте а в первом, второй работает и при 9 калькуляторах на странице
#5 [ЕСТЬ РЕШЕНИЕ] Несколько javascript на одной странице 7 августа 2013 в 21:16

поставить var

lokanaft
то есть в каждом из скриптов нужно глобальные переменные (которые стали глобальными потому что не определены как локальные) дописать var?

зы. Странник все-таки подтолкнул в нужную сторону, теперь хоть узнал про локальные и глобальные переменные =)

приведу пример, чтобы приблизиться к разгадке

имеется скрипт калькулятора:
  1. function usage()
  2. {
  3. if (isNaN(document.form.sqm.value) | isNaN(document.form.P.value))
  4. {
  5. alert("Введите число. В десятичных дробях нужно использовать точку вместо запятой.")}
  6. else
  7. {
  8. document.form.tiles.value=document.form.sqm.value;
  9. document.form.main_run.value=document.form.P.value;
  10. document.form.cross_tee.value=document.form.sqm.value*2.9;
  11. document.form.longer.value=Math.ceil(document.form.sqm.value*0.2);
  12. document.form.union.value=Math.ceil(document.form.sqm.value*1.7);
  13. document.form.hanger.value=Math.ceil(document.form.sqm.value*0.7);
  14. document.form.hanger_t.value=Math.ceil(document.form.sqm.value*0.7);
  15. document.form.screw1.value=Math.ceil(document.form.sqm.value*10);
  16. document.form.screw2.value=Math.ceil(document.form.sqm.value*23);
  17. document.form.band.value=document.form.sqm.value*1.2;
  18. document.form.shpak.value=document.form.sqm.value*0.4;
  19. document.form.anchor.value=Math.ceil(document.form.sqm.value*0.7);
  20. document.form.dubel.value=document.form.main_run.value*2;
  21. }}
  22.  
  23. </script>
запускается он, как я понял, этим
  1. <input type="button" name="submit" value="Рассчитать" onclick="usage()"></td>
когда один на странице, то работает. но стоит добавить второй скрипт:
  1. <input type="button" name="Button" value="Рассчитать" onclick="
  2. yyy.value=0.1*x1.value*x2.value*x3.value*x4.value*x5.value*x6.value*x7.value*x8.value+' кВт';
  3. ttt.value=(0.1*x1.value*x2.value*x3.value*x4.value*x5.value*x6.value*x7.value*x8.value)*1.2+' кВт'
  4. "></td>
и получаем ошибку:
  1. Uncaught TypeError: Cannot read property 'value' of undefined
по ходу перемешиваются скрипты и классы <table class="my_table">
может быть ошибка получения значения из-за того что <table class="my_table"> в каждом скрипте и форме калькулятора?

между тем 4 из девяти работают вместе, а остальные нет. головотрясение какое-то. обычно даже если не знаю что-то то гугл и форумы выручают, а тут прям засада. то ли джаваскрипты программировать сложно настолько что с наскока и не взять высоту…
#6 [ЕСТЬ РЕШЕНИЕ] Несколько javascript на одной странице 7 августа 2013 в 20:29
Кто-нибудь, пожалуйста, напишите доступно для новичка в программировании, какие могут быть причины тому, что несколько скриптов не работают на одной странице?

(понятно что могут быть одинаковые переменные и функции, ошибка получения значения в консоли)

И какими способами можно заставить работать 9 почти одинаковых скриптов на одной странице без переопределений и ошибок получения значения? Может обернуть их в какую-то функцию или метод добавить? Пожалуйста, помогите, хоть советом
#7 [ЕСТЬ РЕШЕНИЕ] Несколько javascript на одной странице 7 августа 2013 в 17:22
Странник
ок, попробую сначала один скрипт запустить из пяти не работающих
"скачу голопом", потому что хочу знать куда капать, чтобы не тратить время на бессмысленные попытки "метода тыка", то есть пытаюсь обозначить проблему. иначе могу пробовать делать то что априори неверно будет (
#8 [ЕСТЬ РЕШЕНИЕ] Несколько javascript на одной странице 7 августа 2013 в 17:13

Вы просто разберетесь с чужим кодом, ну, может подправите его чуток....

Странник

мне не понятен масштаб самой проблемы
подскажите, пожалуйста,

все 9ть скриптов не работают одновременно на странице, потому что в них имеются глобальные переменные, которые следует сделать локальными для каждого скрипта? и мне надо понять какие переменные используются и какие из них необходимо определить глобальными и какие локальными

или проблема в другом?
#9 [ЕСТЬ РЕШЕНИЕ] Несколько javascript на одной странице 7 августа 2013 в 16:52
если я для каждого скрипта внутри функции объявлю локальные переменные, проблема решится?
#10 [ЕСТЬ РЕШЕНИЕ] Несколько javascript на одной странице 7 августа 2013 в 16:36

вы пытаетесь повесить свои функции на событие готовности страницы

Smith
значит совсем не то


дабы голову не дурить вам, уважаемые программисты, что я могу сделать? код скриптов сюда выложить?
#11 [ЕСТЬ РЕШЕНИЕ] Несколько javascript на одной странице 7 августа 2013 в 16:31
Странник
это не я написал, скопировал код на одном из сайтов
я только начал пробовать свои силы в программировании
пока получилось позаимствовать части скриптов и переделать под свой проект
отдельно работают
а вот на одной странице — нет
читаю-читаю, но решения готового нигде нет, наверное, его просто и не может быть =)

еще б знать о чем читать… а то оочень сложно вспомнить, когда никогда не знал
#12 [ЕСТЬ РЕШЕНИЕ] Несколько javascript на одной странице 7 августа 2013 в 16:23

Садитесь-ка за учебники.

Странник
Вы правы. Читать про локальные и глобальные переменные? Решение озвученное в сообщении #12 не трогать? Есть проще решение?
#13 [ЕСТЬ РЕШЕНИЕ] Несколько javascript на одной странице 7 августа 2013 в 16:21

Означает что невозможно получить значение, если вы в функции usage используете значение какого либо инпута и вешаете ее на клик той же кнопки, то вам следует так же передавать значение этого поля, либо явно получать из самой функции.

Smith

инпуты получают значение из той же функции
#14 [ЕСТЬ РЕШЕНИЕ] Несколько javascript на одной странице 7 августа 2013 в 16:19
Smith
я услышал вас
сейчас еще немного почитаю, всмотрюсь и точно буду знать, что конкретно у меня не получается, что спрашивать

пока имею 9 скриптов, которые вывел на станицу и некоторые из них перестали работать. то есть формы для ввода значений отображаются где надо, но скрипты отказываются работать

сейчас попробую перенести все скрипты в один файл, и либо создам обработчик на сами события, например, при помощи функции, которая вешает эти обработчики:

  1. function addListener(obj, type, listener) {
  2. if (obj.addEventListener) {
  3. obj.addEventListener(type, listener, false);
  4. return true;
  5. } else if(obj.attachEvent) {
  6. obj.attachEvent('on' + type, listener);
  7. return true;
  8. }
  9. return false;
  10. }
а потом каждый скрипт в:

  1. addListener(window, 'load', function() {
  2. // инициализация первого скрипта
  3. });
  4. addListener(window, 'load', function() {
  5. // инициализация второго скрипта
  6. });
либо, если не заработает, то буду пробовать создать ООП. Но в этом вообще пока не понимаю, так что пока вариант 1 буду пробовать

зы. кажется что не туда капаю(


Smith
, я пока еще ничего не намудрил. думаю как оформить, чтобы "локализировать" (изолировать) каждый скрипт на странице
#15 [ЕСТЬ РЕШЕНИЕ] Несколько javascript на одной странице 7 августа 2013 в 15:59
в консоли ошибка:
Uncaught TypeError: Cannot read property 'value' of undefined
usage
onclick

сама функция function usage()
onclick="usage()"

есть совпадения в коде скриптов


профессионалы отзовитесь *рудз*! неужели нет способа запустить 9 похожих скриптов на одной странице, чтобы переменные и функции не перемешивались (не переназначались)???
🍪Мы используем файлы cookie для работы сайта. Читать подробнее.