Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вопрос по JS
 
 автор: STEKLO 22   (26.03.2009 в 11:31)   письмо автору
 
 

Здравствуйте. Такой вопрос, потребовалось мне написать программку на яве по расчёту стоимости монтажа для моего сайта http://www.vholodok.ru/ . В яве совершенно не разбираюсь но немного пишу на РНР . Откопал несколько справочников, разобрал несколько примеров, в прицепи для выполнения моей задачи думал достаточно.

Задача простая создаю форму там поля, пользователь выбирает из списка нужные виды работ (например: монтаж такой + авто вышка+ какие то доп работы ) все эти значения умножаются, прибавляются и в итоге получается примерная стоимость монтажа.

Но есть засада. Когда я ставлю знак плюс, то переменные не складываются а состыковываются:
itog = ((array_days_of+montash_sistemi)+cena_trub+cena_koroba+dop_otberctie)*koll_montazh;

Я подозреваю, что значение переменных у меня не числовые а строковые . Не знаю где засада


Посмотрите что у меня получается, я на яве первый раз пишу так сказать проба пера :

<html>
<SCRIPT language="JavaScript">
function calc() 

        {

            form_el = document.forms['forma_montash'].elements;//имя формы//

            
            

            tip_sistemi = form_el['tip_sistemi'].value;//Тип кондиционера//
            
            moshnost_stemi = form_el['moshnost_stemi'].value;//Мощность кондиционера//

            montash_sistemi = form_el['montash_sistemi'].value;//Вариант Монтажа кондиционера//

            diametr_trub = form_el['diametr_trub'].options[form_el['diametr_trub'].options.selectedIndex].value;//Диаметр межблочной магистрали//

            dlinna_trub = form_el['dlinna_trub'].value;//Длинна межблочной магистрали//
            
            razmer_koroba = form_el['razmer_koroba'].options[form_el['razmer_koroba'].options.selectedIndex].value;//Размер короба//

            dlinna_koroba = form_el['dlinna_koroba'].value;//Длинна короба//
            
            dop_otberctie = form_el['dop_otberctie'].value;//Доп. отверстие//

            koll_montazh = form_el['koll_montazh'].value;//Кол-во монтаж   dop_otberctie//
            
            
            //Начало стоимости монтажа оборудования (Тип кондиционера * Мощность кондиционера)//            
            itogo_vicisleniya=(tip_sistemi+moshnost_stemi);
            
            
var days_of_week = new Array(12); 
days_of_week["nasten2"] = 1111; //Столькото рублей//
days_of_week["nasten18"] = 222; 
days_of_week["nasten30"] = 333; 
days_of_week["kasset2"] = 4444; 
days_of_week["kasset18"] = 5555; 
days_of_week["kasset30"] = 6666; 
days_of_week["kana2"] = 7777;
days_of_week["kanal8"] = 8888;
days_of_week["kana30"] = 999;
days_of_week["potol2"] = 1010;
days_of_week["potoll8"] = 1212;
days_of_week["potol30"] = 1414;

alert(days_of_week[itogo_vicisleniya]) ; //Тест //

array_days_of = (days_of_week[itogo_vicisleniya]) ;

                    
            
            //-----------------------------------------------------//


            cena_trub = (diametr_trub*dlinna_trub) ;// стоимости межблочной магистрали (Длинна * Диаметр)//
            cena_koroba = (razmer_koroba*dlinna_koroba) ;// стоимости короба (Длинна * Диаметр)//
                        
            itog = ((array_days_of+montash_sistemi)+cena_trub+cena_koroba+dop_otberctie)*koll_montazh;//????????????тут нужна помощ??????????//

            
            document.forms['forma_montash'].elements['itogo'].value = itog;
            
            //-----------------------------------------------------//

        }


</SCRIPT>





<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>П</title>
</head>

<body>







<div align="center">







<table width="50%"  border="1" cellpadding="5" cellspacing="5" bgcolor="#C0C0C0">
                        <!--скрипт расчёта кондиционера-->
                        <FORM name=forma_montash>
                                                <tr>
                          <td><span class="raschet_text">Тип оборудования<br />
                            </span>
                            <SELECT name="tip_sistemi" class="raschet_forma">
                              <OPTION value="nasten" selected>Настенный</OPTION>
                              <OPTION value="kasset">Кассетный</OPTION>
                              <OPTION value="kanal">Канальный</OPTION>
                              <OPTION value="potol">Потолочный</OPTION>
                              <OPTION value="nasten">Напольный</OPTION>
                            </SELECT>
                          </td>
                        </tr>
                        <tr>
                          <td><span class="raschet_text">Мощность оборудования<br />
                            </span>
                            <SELECT name="moshnost_stemi" class="raschet_forma">
                              <OPTION value="2" selected>0,5-12(1,5-3,99)кВт</OPTION>
                              <OPTION value="18">18-24(4-7,5)кВт</OPTION>
                              <OPTION value="30">30-36(8,2-10,3)кВт</OPTION>
                            </SELECT>
                          </td>
                        </tr>
                        <tr>
                          <td><span class="raschet_text">Варианты монтажа<br />
                            </span>
                            <SELECT name="montash_sistemi" class="raschet_forma">
                              <OPTION value="100">1 этаж (лестница)</OPTION>
                              <OPTION value="200">2 этаж (лестница)</OPTION>
                              <OPTION value="300">Под окно</OPTION>
                              <OPTION value="400">Автовышка (до 5 этажа)</OPTION>
                              <OPTION value="500">Автовышка (до 8 этажа)</OPTION>
                              <OPTION value="600">Альпинист</OPTION>
                            </SELECT>
                          </td>
                        </tr>
                        <tr>
                          <td><span class="raschet_text">Диаметр и длинна магистрали<br />
                            <SELECT name="diametr_trub" class="raschet_forma">
                              <OPTION value="370" selected>1/4 + 3/8</OPTION>
                              <OPTION value="422">1/4 + 1/2</OPTION>
                              <OPTION value="536">1/4 + 5/8</OPTION>
                              <OPTION value="600">3/8 + 5/8</OPTION>
                              <OPTION value="666">3/8 + 3/4</OPTION>
                              <OPTION value="718">1/2 + 3/4</OPTION>
                            </SELECT>&nbsp;&nbsp; </span>
                            <INPUT name="dlinna_trub" value="3" size="15" class="raschet_forma" /></td>
                        </tr>
                        <tr>
                          <td><span class="raschet_text">Короб декоративный<br />
                            <SELECT name="razmer_koroba" class="raschet_forma">
                              <OPTION value="370" selected>100х100</OPTION>
                              <OPTION value="400">150х150</OPTION>
                              <OPTION value="500">120х120</OPTION>
                              <OPTION value="600">120х120</OPTION>
                            </SELECT>&nbsp;&nbsp; </span>
                            <INPUT name="dlinna_koroba" value="3" size="15" class="raschet_forma" /></td>
                        </tr>
                        <tr>
                          <td><span lang="ru"><span class="raschet_text">Доп. 
                            отверстие</span></span><br />
                            <input name="dop_otberctie" value="2" size="15" class="raschet_forma" /></td>
                        </tr>
                        <tr>
                          <td><span class="raschet_text">Кол. монтажей</span><br />
                            <input name="koll_montazh" value="2" size="15" class="raschet_forma" /></td>
                        </tr>
                        <tr>
                          <td class="raschet_forma"><div align="center">
                              <INPUT onClick="calc()" type="button" value="Рассчитать" />
                              <INPUT type="reset" value="Очистить" />
                            </div></td>
                        </tr>
                        <tr>
                          <td class="raschet_text"><div align="center"><strong>
                            Цена монтажа кондиционера должна составить</strong></div></td>
                        </tr>
                        <tr>
                          <td class="raschet_forma">Итого:&nbsp; 
                            <input size="50" name="itogo" /> руб.</td>
                        </tr>
                      </form></table>







</div>
</body>

</html>

  Ответить  
 
 автор: Волки   (26.03.2009 в 12:38)   письмо автору
 
   для: STEKLO 22   (26.03.2009 в 11:31)
 

для преобразования строк в числа есть ф-ции: parseInt и parseFloat

  Ответить  
 
 автор: PAT   (26.03.2009 в 12:44)   письмо автору
 
   для: STEKLO 22   (26.03.2009 в 11:31)
 

Отдельного оператора конкатенации строк (как точка в PHP) в Javascript'e нет
- в нём используется обычный +. Парсер САМ определяет тип операндов и,
если это тип Number (число), то происходит арифметическое сложение,
а если это тип String (строка) - то осуществляется конкатенация.

Свойство value ВСЕГДА возвращает переменную типа String,
потому у вас и происходит конкатенация.

В общем, проблема решается просто:
в тех случаях, когда значение value ЗАВЕДОМО должно быть ЧИСЛОМ,
его и НУЖНО преобразовать в число.
Это делается так:
dlinna_trub = form_el['dlinna_trub'].value * 1;//Длинна межблочной магистрали//
Сделайте аналогично со всеми переменными, где вам ЗАВЕДОМО нужно иметь числовое значение.

PS. можно, разумеется, использовать и методы, кои вам (одновременно со мной) предложены
коллегой Волки, но мой способ работает с теми же результатами, но много быстрее.

  Ответить  
 
 автор: STEKLO 22   (26.03.2009 в 14:26)   письмо автору
 
   для: PAT   (26.03.2009 в 12:44)
 

О супер всё работает ;
Спасибо

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования