| getData и формы. Не работает в опере. | 
|  | 
| 
| zxc76 | Дата: Вторник, 26 Августа 2014, 22:40 | Сообщение # 1 |  |   39DLL Rulezz Сейчас нет на сайте | В хроме всё прекрасно работает. В опере только галочка "Срочный заказ" реагирует. В чем ошибка?
 Другие браузеры вообще боюсь открывать...
 Код:
 
 Код  <script language="JavaScript">
 var ye_stil_plus = [];
 var ye_day_plus=[];
 var proc_speed=[];
 var day_speed=[];
 var ye_rec=[];
 var ye_in=[];
 
 
 stil_vbr=1;
 ye_stil_plus[1]=100;
 ye_stil_plus[2]=244;
 ye_stil_plus[3]=524;
 ye_day_plus[1]=2;
 ye_day_plus[2]=1;
 ye_day_plus[3]=5;
 ye_rec=300;
 ye_in=40;
 day_speed=2;
 proc_speed=30;
 
 function getData(f) {
 stil_vbr=parseFloat(f.stil.value);
 ye_stil=ye_stil_plus[stil_vbr];
 day_out=ye_day_plus[stil_vbr];
 ye_out=ye_stil;
 
 ye_out_1kup=ye_out;
 kyp=parseFloat(f.kyp.value);
 ye_out=ye_out*kyp+ye_in;
 
 if(f.ch_speed.checked){
 ye_out+=ye_out/100*proc_speed;
 day_out=day_speed;
 }
 
 f.ye_out.value="Цена: "+ye_out.toString();
 f.day_out.value="Дней: "+day_out;
 
 }
 
 </script>
 
 <center>
 <table  border=0 width=55% cellspacing="0" cellpadding="0" bgcolor=#137464 align=left>
 <td height=40 align=center>
 <font size=5 face="BOOKMAN OLD STYLE" color="white" > Заполните заказ</b></font>
 </td>
 </table>
 <table  border=0 width=55% cellspacing="0" cellpadding="0" bgcolor=#108468 align=left>
 <td width=150 bgcolor=#098167> </td>
 <td border=0  align=left>
 
 <form name="test" method="post" action="" enctype="multipart/form-data">
 <table align="left" cellspacing="15" cellpadding="2" border="0" width="30">
 <Br><Br>
 <input type="text" name="tip" size=1 value="1"  style="background-color: transparent; border-color:transparent;  color:transparent;" >
 
 
 
 
 <p><font size=5 face="BOOKMAN OLD STYLE" color="white" >
 Какой стиль вам больше близок.</b></font><Br>Как-будто здесь картинки)
 <font size=4 face="BOOKMAN OLD STYLE" color="white" >
 
 <input type="radio" name="stil" id="1" value="1" checked onchange="getData(this.form)">Р1<Br>
 <input type="radio" name="stil" id="2" value="2" checked onchange="getData(this.form)">Р2<Br>
 <input type="radio" name="stil" id="1" value="3" checked onchange="getData(this.form)">Р3<Br>
 </font></p><br>
 
 
 <p><font size=5 face="BOOKMAN OLD STYLE" color="white" >
 Количество необходимых рисунков:</b></font><Br>
 <font size=4 face="BOOKMAN OLD STYLE" color="white" >
 
 <input type="radio" name="kyp" id="1" value="1" checked onchange="getData(this.form)">1<Br>
 <input type="radio" name="kyp" id="1" value="2" checked onchange="getData(this.form)">2<Br>
 <input type="radio" name="kyp" id="1" value="3" checked onchange="getData(this.form)">3<Br>
 </font></p><br><p>
 
 <font size=4 face="BOOKMAN OLD STYLE" color="white" >
 
 <p>
 <font size=4 face="BOOKMAN OLD STYLE" color="white" >
 <input type="checkbox" name="ch_speed" id="ch_speed"  onchange="getData(this.form)">
 <label for="ch_speed" >Срочный заказ</label>
 </font></p>
 
 
 
 
 </td>
 </table>
 
 <font size=4 face="BOOKMAN OLD STYLE" color="white" >
 Результат:<Br></font>
 <center>
 <input name=ye_out size=8 value="Нет данных" disabled style="background-color: transparent; border-color:transparent; font-size: 28px; color:white;">
 <Br>
 <input name=day_out size=8 value="Нет данных" disabled style="background-color: transparent; border-color:transparent; font-size: 24px; color:white;" >
 <Br>
 <p><input type="submit" value="Отправить заказ"></p>
 </center>
 </form>
 </td>
 </table>
 
 PHP
 |  |  |  |  | 
| 
| lvovand | Дата: Вторник, 26 Августа 2014, 23:21 | Сообщение # 2 |  | старожил Сейчас нет на сайте | как то уж куча всего нехорошего <input type="radio" name="stil" id="1" value="1" и т.д.
 если они у тебя radio, то почему у всех checked проставлено?
 id почему то у элементов повторяюся, хотя id на то и id чтобы уникальным быть
 
 как-то странно к элементам обращаешься f.stil.value
 
 тогда уж f.stil[0].value, f.stil[1].value и т.д.
 Добавлено (26.08.2014, 23:21)---------------------------------------------
 да и зачем вообще такую кучу переменных?
 у тебя же просто есть цена в зависимости от стиля, как я понимаю, умножается на кол-во, ну и надбавка за срочность,
 все это можно в пару строк расписать в функции, без кучи массивов и переменных
 
 Разработка и продвижение сайтов. Дизайн
 |  |  |  |  | 
| 
| zxc76 | Дата: Вторник, 26 Августа 2014, 23:49 | Сообщение # 3 |  |   39DLL Rulezz Сейчас нет на сайте | lvovand, хорошо, поменяю эти штуки все) У меня просто ещё php был привязан, и он сам задавл id.
 checked ставил чтоб последний был выбран, это тоже мелочь, но проверю, может Опера на это так реагировала)
 
 
 Цитата lvovand (  ) как-то странно к элементам обращаешься f.stil.value тогда уж f.stil[0].value, f.stil[1].value и т.д.
Об этом не знал, исправлю! Хотя Опере это вроде всё равно.
 
 
 Цитата lvovand (  ) у тебя же просто есть цена в зависимости от стиля, как я понимаю, умножается на кол-во, ну и надбавка за срочность, все это можно в пару строк расписать в функции, без кучи массивов и переменных
У меня куча всего из php берется просто)))) И я убрал параметра 3-4 ещё)
 
 PHP
 |  |  |  |  | 
| 
| last2424 | Дата: Среда, 27 Августа 2014, 00:08 | Сообщение # 4 |  |   30 мл. блоков Сейчас нет на сайте | zxc76, ещё есть вариант такой, у браузеров всех разное, а может у кого то одинаковое восприятие JavaScript'a какие то функций работают нормально, какие то через задницу. 
 Предупреждение: всё что я написал в зачёркнутом виде является шуткой и никак не пытает обидеть того к кому обращаются.
 (нет)
 
 Сообщение отредактировал last2424 - Пятница, 29 Августа 2014, 15:06 |  |  |  |  | 
| 
| lvovand | Дата: Среда, 27 Августа 2014, 01:36 | Сообщение # 5 |  | старожил Сейчас нет на сайте | f.stil[0].value - ну собственно не можно а нужно )) ты же по сути делаешь getElementsByName - и получаешь массив элементов у которых name=...
 
 противник тоже библиотек?
 так то бы можно подключить бибилиотеку, хоть тот же jquery, в ней спокойно выборку и обращение к элементам делать, и во всех браузерах нормально сработает.
 
 так навскидку я бы прописывал у радиобаттонов
 <input type="radio" name="..." id="..." data-days="..." data-price="...">
 
 и итоговая функция была бы проще
 
 function getData(){
 $("input:checked").each(function(){
 тут смотреть уже аттрибуты выделенного радиобаттона или чекбокса и делать расчет
 }
 );
 }
 
 Разработка и продвижение сайтов. Дизайн
 |  |  |  |  | 
| 
| zxc76 | Дата: Среда, 27 Августа 2014, 20:47 | Сообщение # 6 |  |   39DLL Rulezz Сейчас нет на сайте | lvovand, хорошо, учту всё это. Хотя данные с форм везде принимаются, а вот дальше что-то не так идет. Возьму jquery как решение проблемы)) Спасибо)
 А нет альтернативы джаваскрипту? Которая бы высчитывала стоимость исходя из того что нажата на формах. Что-то минимальное)
 
 PHP
 |  |  |  |  | 
| 
| lvovand | Дата: Среда, 27 Августа 2014, 22:54 | Сообщение # 7 |  | старожил Сейчас нет на сайте | Цитата zxc76 (  ) А нет альтернативы джаваскрипту?asp? )
 но это уж из пушки по воробьям, всяко js тут самое простое и правильное
 
 Разработка и продвижение сайтов. Дизайн
 |  |  |  |  | 
| 
| zxc76 | Дата: Суббота, 30 Августа 2014, 23:20 | Сообщение # 8 |  |   39DLL Rulezz Сейчас нет на сайте | lvovand, спасибо за помощь) Определенно jquery))
 Добавлено (30.08.2014, 23:20)---------------------------------------------
 Я решил проблему.
 lvovand, промыл мозг, с этим массивом после имени (f.stil[0].value ), и я понял в чем дело было))))
 
 В хроме f.stil.value возвращает значение выбранного элемента из radio stil. А в опере возвращало NaN.
 
 Написал функцию, которая возвращает на каком элементе стоит checked.
 [code]
 function getRadioVbr(rad_f) {
 a=0;
 for(i=0;i<=rad_f.length-1;i++){
 if(rad_f[i].checked){
 a=i+1;
 }
 }
 return a;
 }
 
 getRadioVbr(f.stil);//возвращает номер выбранного элемента из radio stil, это то что мне было нужно.
 
 Может кому-то это решение пригодиться)))
 
 PHP
 |  |  |  |  | 
| 
| romgerman | Дата: Суббота, 30 Августа 2014, 23:28 | Сообщение # 9 |  |   старожил Сейчас нет на сайте | Не смотря на то, что проблема решена, я скажу, что в опере жс двиг немного кривой, поэтому даже в "идеальном" коде может что-то не так работать. 
 
 Сообщение отредактировал romgerman - Суббота, 30 Августа 2014, 23:28 |  |  |  |  | 
| 
| zxc76 | Дата: Суббота, 30 Августа 2014, 23:51 | Сообщение # 10 |  |   39DLL Rulezz Сейчас нет на сайте | romgerman, это даа, ты прав!!! Опера полна сюрпризов. Как раз когда ты написал, я узнал что если поставить на input- disabled, то цвет внутри инпута будет всегда серым (в опере). Пришлось через джаваскрипт имитировать disabled чтоб цвет поставить другой))))) 
 PHP
 |  |  |  |  |