Помогите сократить скрипт
Вот такую конструкцию можно сделать меньше?
if (document.getElementById('standart').checked) {sum2 += 0;} else if (document.getElementById('splen').checked) { if (document.getElementById('100').checked) {sum2 += 150;} if (document.getElementById('200').checked) {sum2 += 250;} if (document.getElementById('300').checked) {sum2 += 350;} if (document.getElementById('400').checked) {sum2 += 450;} if (document.getElementById('500').checked) {sum2 += 550;} if (document.getElementById('600').checked) {sum2 += 650;} if (document.getElementById('700').checked) {sum2 += 750;} if (document.getElementById('800').checked) {sum2 += 850;} if (document.getElementById('900').checked) {sum2 += 950;} if (document.getElementById('1000').checked) {sum2 += 1050;} } else if (document.getElementById('designer').checked) { if (document.getElementById('100').checked) {sum2 += 75;} if (document.getElementById('200').checked) {sum2 += 125;} if (document.getElementById('300').checked) {sum2 += 235;} if (document.getElementById('400').checked) {sum2 += 458;} if (document.getElementById('500').checked) {sum2 += 569;} if (document.getElementById('600').checked) {sum2 += 652;} if (document.getElementById('700').checked) {sum2 += 758;} if (document.getElementById('800').checked) {sum2 += 863;} if (document.getElementById('900').checked) {sum2 += 912;} if (document.getElementById('1000').checked) {sum2 += 1087;} } else if (document.getElementById('cover').checked) { if (document.getElementById('100').checked) {sum2 += 12;} if (document.getElementById('200').checked) {sum2 += 28;} if (document.getElementById('300').checked) {sum2 += 34;} if (document.getElementById('400').checked) {sum2 += 47;} if (document.getElementById('500').checked) {sum2 += 59;} if (document.getElementById('600').checked) {sum2 += 65;} if (document.getElementById('700').checked) {sum2 += 72;} if (document.getElementById('800').checked) {sum2 += 88;} if (document.getElementById('900').checked) {sum2 += 93;} if (document.getElementById('1000').checked) {sum2 += 114;} } |
<input type="checkbox" data-val="150">
и т.п. Получаем все выбранные флажки и складываем значения из data-val. PS. Если value флажков иным не задействовано, то хранить эти значения лучше в нем, а не в data-val. |
laimas,
4 варианта для data-val не многовато? |
На самом деле как-то странно: Это чекбоксы? И может быть множественный выбор вариантов? и все суммировать?
|
Цитата:
|
Это типа калькулятора приведу весь скрипт, в зависимости от выбранных чекбоксов меняется сумма.
function getOrderStampSum() { var sum = 0; var sum2 = 0; var sum3 = 0; var sum4 = 0; var sum5 = 0; if (document.getElementById('100').checked) {sum += 297;} else if (document.getElementById('200').checked) {sum += 421;} else if (document.getElementById('300').checked) {sum += 545;} else if (document.getElementById('400').checked) {sum += 710;} else if (document.getElementById('500').checked) {sum += 834;} else if (document.getElementById('600').checked) {sum += 958;} else if (document.getElementById('700').checked) {sum += 1123;} else if (document.getElementById('800').checked) {sum += 1247;} else if (document.getElementById('900').checked) {sum += 1371;} else if (document.getElementById('1000').checked) {sum += 1537;} if (document.getElementById('design1').checked) {sum5 += 0;} else if (document.getElementById('design2').checked) {sum5 += 100;} else if (document.getElementById('design3').checked) {sum5 += 300;} else if (document.getElementById('design4').checked) {sum5 += 500;} if (document.getElementById('sides1').checked) {sum3 += 0;} else if (document.getElementById('sides2').checked) { if (document.getElementById('100').checked) {sum3 += 120;} else if (document.getElementById('200').checked) {sum3 += 187;} else if (document.getElementById('300').checked) {sum3 += 255;} else if (document.getElementById('400').checked) {sum3 += 345;} else if (document.getElementById('500').checked) {sum3 += 413;} else if (document.getElementById('600').checked) {sum3 += 480;} else if (document.getElementById('700').checked) {sum3 += 570;} else if (document.getElementById('800').checked) {sum3 += 638;} else if (document.getElementById('900').checked) {sum3 += 705;} else if (document.getElementById('1000').checked) {sum3 += 795;} } if (document.getElementById('standart').checked) {sum2 += 0;} else if (document.getElementById('splen').checked) { if (document.getElementById('100').checked) {sum2 += 103;} if (document.getElementById('200').checked) {sum2 += 165;} if (document.getElementById('300').checked) {sum2 += 226;} if (document.getElementById('400').checked) {sum2 += 309;} if (document.getElementById('500').checked) {sum2 += 371;} if (document.getElementById('600').checked) {sum2 += 433;} if (document.getElementById('700').checked) {sum2 += 516;} if (document.getElementById('800').checked) {sum2 += 578;} if (document.getElementById('900').checked) {sum2 += 639;} if (document.getElementById('1000').checked) {sum2 += 721;} } else if (document.getElementById('designer').checked) { if (document.getElementById('100').checked) {sum2 += 0;} if (document.getElementById('200').checked) {sum2 += 0;} if (document.getElementById('300').checked) {sum2 += 0;} if (document.getElementById('400').checked) {sum2 += 0;} if (document.getElementById('500').checked) {sum2 += 0;} if (document.getElementById('600').checked) {sum2 += 0;} if (document.getElementById('700').checked) {sum2 += 0;} if (document.getElementById('800').checked) {sum2 += 0;} if (document.getElementById('900').checked) {sum2 += 0;} if (document.getElementById('1000').checked) {sum2 += 0;} } else if (document.getElementById('cover').checked) { if (document.getElementById('100').checked) {sum2 += 218;} if (document.getElementById('200').checked) {sum2 += 349;} if (document.getElementById('300').checked) {sum2 += 481;} if (document.getElementById('400').checked) {sum2 += 656;} if (document.getElementById('500').checked) {sum2 += 787;} if (document.getElementById('600').checked) {sum2 += 918;} if (document.getElementById('700').checked) {sum2 += 1093;} if (document.getElementById('800').checked) {sum2 += 1224;} if (document.getElementById('900').checked) {sum2 += 1356;} if (document.getElementById('1000').checked) {sum2 += 1530;} } if (document.getElementById('krug1').checked) {sum4 += 0;} else if (document.getElementById('krug2').checked) { if (document.getElementById('100').checked) {sum4 += 50;} else if (document.getElementById('200').checked) {sum4 += 100;} else if (document.getElementById('300').checked) {sum4 += 150;} else if (document.getElementById('400').checked) {sum4 += 200;} else if (document.getElementById('500').checked) {sum4 += 250;} } document.getElementById('order_stamp_sum').innerHTML = sum+sum2+sum3+sum4+sum5; } То есть получается, что 30 разных материалов типа 'cover', 'designer' и т.д. Но все в количествах 100, 200, 300 и т.д. Писать вот такую конструкцию 30-40 раз вроде не правильно и грамоздко else if (document.getElementById('splen').checked) { if (document.getElementById('100').checked) {sum2 += 103;} if (document.getElementById('200').checked) {sum2 += 165;} if (document.getElementById('300').checked) {sum2 += 226;} if (document.getElementById('400').checked) {sum2 += 309;} if (document.getElementById('500').checked) {sum2 += 371;} if (document.getElementById('600').checked) {sum2 += 433;} if (document.getElementById('700').checked) {sum2 += 516;} if (document.getElementById('800').checked) {sum2 += 578;} if (document.getElementById('900').checked) {sum2 += 639;} if (document.getElementById('1000').checked) {sum2 += 721;} |
Цитата:
Проблемы возникают тогда, когда такие данные вываливают на клиенте в неудобном представлении, что у вас и наблюдается. |
Цитата:
|
Цитата:
|
raspin,
<!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> </head> <body> <form action="http://" > <input id="standart" name="item" type="radio"> standart <input id="splen" name="item" type="radio"> splen <input id="designer" name="item" type="radio"> designer <input id="cover" name="item" type="radio"> cover <br> <input id="100" name="kol" type="radio"> 100 <input id="200" name="kol" type="radio"> 200 </form> <div id="out"></div> <script> var data = { splen: { 100: 150, 200: 250 }, designer: { 100: 75, 200: 125 }, cover: { 100: 12, 200: 28 } }; document.querySelector("form").addEventListener("change", function() { var sum = 0; var elem = document.querySelector('[name="item"]:checked'); var obj; if (elem && (obj = data[elem.id])) { elem = document.querySelector('[name="kol"]:checked'); if (elem && (obj = obj[elem.id])) sum += obj } document.querySelector("#out").innerHTML = sum }); </script> </body> </html> |
рони,
это зря. ;) |
Цитата:
|
Цитата:
|
else if (document.getElementById('designer').checked) { if (document.getElementById('100').checked) {sum2 += 0;} if (document.getElementById('200').checked) {sum2 += 0;} if (document.getElementById('300').checked) {sum2 += 0;} if (document.getElementById('400').checked) {sum2 += 0;} if (document.getElementById('500').checked) {sum2 += 0;} if (document.getElementById('600').checked) {sum2 += 0;} if (document.getElementById('700').checked) {sum2 += 0;} if (document.getElementById('800').checked) {sum2 += 0;} if (document.getElementById('900').checked) {sum2 += 0;} if (document.getElementById('1000').checked) {sum2 += 0;} } улыбнуло :) |
Рони огромное спасибо это прям то, что нужно.
laimas данные как раз не хранятся в базе, они отдельно в файле |
Цитата:
|
laimas,
не понимаю причём тут сервер ... |
laimas,
Там вряд ли сервер судя по коду, там клиент скрипя зубами |
Цитата:
|
j0hnik,
хрень пороть то зачем? Если бы это было локальное приложение, тогда и бы вопросов не было. |
laimas,
я пас, задача была упростить, я предложил вариант, более мне добавить нечего. |
Цитата:
|
Всем кто захочет предложить очередной пример из 1000 и одного, надо на это обратить внимание:
if (document.getElementById('splen').checked) { if (document.getElementById('100').checked) ... ..... } А значит удобнее, выгоднее, это select. Тут явно кверху каком связан клиент с сервером. |
Цитата:
|
Цитата:
Изначально косяк в представлении, к этому косяку предлагаются решения, и что в итоге будет? ;) |
Цитата:
Объект с данными - действительно лишнее, нужные данные могут содержаться в самих элементах. Так что нужно начинать с html - скрипт в результате сам минимизируется. Я и сам вначале сделал вариант с массивом массивов типа [['cover','100',125]..... и разместил ответ - но подумал, и почти сразу же удалил. |
Цитата:
|
Цитата:
|
Цитата:
Один флажок определяет "опрашивать или нет" группу подчиненных, а это значит список. А подчиненные ведь флажки, а значит выбор множества из множества, поэтому и multiple. В противном случае радиокнопки были бы. А что там на самом деле я также как и вы не знаю. :) |
Цитата:
|
Часовой пояс GMT +3, время: 20:23. |