Показать сообщение отдельно
  #19 (permalink)  
Старый 10.04.2017, 02:47
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Andree007,
не понятно зачем писать итог в ячейку с текстом "итог", а если для итога поле name="r", то это вообще профанация, это остальные поля должны иметь имена, сервер сам должен считать итог на основе выбора, все что на клиенте только для клиента.

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

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script> 
$(function() {
    $('form').on('input submit', function(e) {
        e.preventDefault();
        var v = a = 0, p = 1, r = $('#r').empty();
        //основные поля
        $.each($(this.elements).slice(0, -4), function() {
            if($.trim(this.value))  v += this.getAttribute('factor') * this.value 
        });
        //есть выбор, отправка формы
        if(v) {
            $.each($(this).find('input:checked'), function() {
                this.value > 1 ? a = +this.value : p += +this.value 
            });
            r.text((v * p + a).toFixed(2))
        } else if(e.type=='submit') {
            //нет выбора основных полей
            alert('Нет выбора')
        }         
    })
});
</script> 
</head>
<body>
<form method="post" id="myform" autocomplete="off">
<table>
<tbody>
<tr>
       <td>Сварка </td>
       <td>7,5 р / см</td>
       <td><input factor="7.5" type="number" min="0"/></td>
</tr>
<tr>
       <td>Рез, зачистка реза, сборка</td>
       <td>32 р / шт</td> 
       <td><input factor="32" type="number" min="0"/></td>
<tr>
       <td>Зачистка шва</td>
       <td>2 р / см</td>
       <td><input factor="2" type="number" min="0"/></td>
</tr>
<tr>
       <td>Покраска, обезжиривание, грунт (лист)</td>
       <td>230 р / м.кв</td>
       <td><input factor="230" type="number" min="0"/></td>
</tr>
<tr>
       <td>Покраска, обезжиривание, грунт (профиль)</td>
       <td>30 р  /м.п</td>
       <td><input factor="30" type="number" min="0"/></td>
</tr>
<tr>
       <td>шпаклевка шва</td>
       <td>15 р / шт</td>
       <td><input factor="15" type="number" min="0"/></td>
</tr>
<tr>
       <td>шлифовка шва </td>
       <td>36 р / шт</td>
       <td><input factor="36" type="number" min="0"/></td>     
</tr>
<tr>
       <td>Монтаж на объекте</td>
       <td>20%</td>
       <td><input value="0.2" type="checkbox"></td>
</tr>
<tr>
       <td>Дизайн</td>
       <td>30%</td>
       <td><input value="0.3" type="checkbox"></td>
</tr>
<tr>
       <td>Выезд замерщика</td>
       <td>800р </td>
       <td><input value="800" type="checkbox"></td>
</tr>
<tr>
       <td>Итого</td>
       <td id="r"></td>
</tr>
</tbody>
</table>
<button>Отправить</button>
 </form>
</body>
</html>

Последний раз редактировалось laimas, 10.04.2017 в 03:15.
Ответить с цитированием