Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 08.04.2017, 19:33
Интересующийся
Отправить личное сообщение для Andree007 Посмотреть профиль Найти все сообщения от Andree007
 
Регистрация: 08.04.2017
Сообщений: 11

спасибо !! большое все доступно ))) извините что много глупых вопросов , только начал постигаю азы ))) не сразу понял что это выражение процентов ))
Ответить с цитированием
  #12 (permalink)  
Старый 08.04.2017, 19:44
Интересующийся
Отправить личное сообщение для Andree007 Посмотреть профиль Найти все сообщения от Andree007
 
Регистрация: 08.04.2017
Сообщений: 11

Сообщение от laimas Посмотреть сообщение
Константы, на которые производится умножение, можно содержать в атрибутах самих полей. Во-первых не потребуется менять скрипт, если они вдруг изменяться, а во вторых вот такого

a1=$("#a1").val()*7.5;
a2=32 *$("#a2").val();
a3=2 *$("#a3").val();
a4=230 *$("#a4").val();
a5=30 *$("#a5").val();
a6=15 *$("#a6").val();
a7=36 *$("#a7").val();

совсем не нежно будет, как и кучи переменных a1,a2,a3,a4,a5,a6,a7.

По событию ввода получайте коллекцию полей ввода и проходом в цикле получайте значение текущего поля, константу из атрибута, умножаем и т.д.
то есть если я правильно понял мы прописываем умножения на число непосредственно в input а в script уже через идинтификатор производим все действия
Ответить с цитированием
  #13 (permalink)  
Старый 08.04.2017, 20:03
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Andree007
мы прописываем умножения на число непосредственно в input а в script уже через идинтификатор производим все действия
И да, и нет. Множители прописываем в поля, а вот id совсем не нужны.

Всю шелуху типа border="2" cellpadding="0" cellspacing="0" height="200" width="650" id="" и valign="top" width="180" удалить, лучше это задать через CSS. Поля, это чисто поле, тип его, множитель, значение по умолчанию 0 можно и не использовать.

<input data-factor="7.5" type="number">

Если уж потребуется какая-то индивидуальность, то имя класса еще. Все, не стоит перегружать код лишним.

По событию выбрать только те поля формы (коллекцию полей) у которых есть установленное значение (смотрите filter() в JQ, но можно и без фильтра с проверкой или нулем по умолчанию) и флажки, которые выбраны. Обходим это набор в цикле, умножая data('factor') на значения поля, суммируя. Попробуйте самостоятельно, не получится, тогда уже с проблемами сюда.
Ответить с цитированием
  #14 (permalink)  
Старый 08.04.2017, 22:25
Интересующийся
Отправить личное сообщение для Andree007 Посмотреть профиль Найти все сообщения от Andree007
 
Регистрация: 08.04.2017
Сообщений: 11

Сообщение от laimas Посмотреть сообщение
И да, и нет. Множители прописываем в поля, а вот id совсем не нужны.

Всю шелуху типа border="2" cellpadding="0" cellspacing="0" height="200" width="650" id="" и valign="top" width="180" удалить, лучше это задать через CSS. Поля, это чисто поле, тип его, множитель, значение по умолчанию 0 можно и не использовать.

<input data-factor="7.5" type="number">

Если уж потребуется какая-то индивидуальность, то имя класса еще. Все, не стоит перегружать код лишним.

По событию выбрать только те поля формы (коллекцию полей) у которых есть установленное значение (смотрите filter() в JQ, но можно и без фильтра с проверкой или нулем по умолчанию) и флажки, которые выбраны. Обходим это набор в цикле, умножая data('factor') на значения поля, суммируя. Попробуйте самостоятельно, не получится, тогда уже с проблемами сюда.
согласен нужно сокращать код )) про стили в отдельный фаил это верно , просто это черновик эксперементальный ...

а вот на счет сокращений скрипта не совсем разобрался попробовал вписать в input data-factor ... но не инициализировалось значение , если можно хотелось бы посмотреть на любой подобный вид кода )

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

<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script> 
$(function() {
    $('input').on('input', function() {
        alert(this.getAttribute('data-factor')*this.value)
        //в JQ значение можителя будет доступно как $(this).data('factor')
    })
});
</script> 
</head>
<body>
<input data-factor="7.5" type="number">
</body>
</html>
Ответить с цитированием
  #16 (permalink)  
Старый 09.04.2017, 21:44
Интересующийся
Отправить личное сообщение для Andree007 Посмотреть профиль Найти все сообщения от Andree007
 
Регистрация: 08.04.2017
Сообщений: 11

не пойму что не так ??? ешил просить код
$('document').ready(function(){

  $(function() {
    $('input').on('input', function() {
   (this.getAttribute('data-factor')*this.value);
   var a1,a2,a3,a4,a5,a6,a7
      a1=$('a1')
      a2=$('a2')
      a3=$('a3')
      a4=$('a4')
      a5=$('a5')
      a6=$('a6')
      a7=$('a7')

var arr = (a1,a2,a3,a4,a5,a6,a7);
function arraySum(array){
var z = 0;
for(var i = 0; i < array.length; i++){
    z += array[i];
    }
}

        if ($('#a8').prop('checked')) z *= 1.2;
         if ($('#a9').prop('checked')) z *= 1.3;
         if ($('#a10').prop('checked')) z += 800;
        $('#rezz').html(z.toFixed(2)+' Рублей');
    });

});
});
Ответить с цитированием
  #17 (permalink)  
Старый 09.04.2017, 21:45
Интересующийся
Отправить личное сообщение для Andree007 Посмотреть профиль Найти все сообщения от Andree007
 
Регистрация: 08.04.2017
Сообщений: 11

сори опечатка *(решил упростить код )
Ответить с цитированием
  #18 (permalink)  
Старый 10.04.2017, 00:00
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Andree007,
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
  <script>
$(function() {
    $("input").on("input click", function() {
        var items = document.querySelectorAll('[type="number"][data-factor]');
        var z = [].reduce.call(items, function(sum, el) {
            var num = +el.value || 0,
                factor = +el.dataset.factor || 0;
            return sum + num * factor
        }, 0);
        items = document.querySelectorAll('[type="checkbox"]');
        z = [].reduce.call(items, function(sum, el) {
            var up = +el.dataset.up || 0,
                factor = +el.dataset.factor || 0;
            return !el.checked ? sum : up ? sum + up : sum + z * factor
        }, z);
        $("#rezz").html(z.toFixed(2) + " Рублей")
    })
});
  </script>
</head>

<body>
<form method=post id="myform">
<table border="2" cellpadding="0" cellspacing="0" height="200" width="650" id="" >
<tbody>
<tr>
  <td valign="top" width="180">Сварка </td>
     <td valign="top" width="80">7,5 р / см</td>
     <td valign="top" width=""><input data-factor="7.5" type="number"></td>
</tr>
<tr>
  <td valign="top" width="180">Рез, зачистка реза, сборка</td>
     <td valign="top" width="80">32 р / шт</td>
     <td valign="top" width="80"><input data-factor="32" type="number"></td>
</tr>
<tr>
  <td valign="top" width="180">Зачистка шва</td>
     <td valign="top" width="80">2 р / см</td>
     <td valign="top" width="80"><input data-factor="2" type="number"></td>
</tr>
<tr>
  <td valign="top" width="180">Покраска, обезжиривание, грунт (лист)</td>
     <td valign="top" width="80">230 р / м.кв</td>
     <td valign="top" width="80"><input data-factor="230" type="number"></td>
</tr>
<tr>
  <td valign="top" width="180">Покраска, обезжиривание, грунт (профиль)</td>
     <td valign="top" width="80">30 р  /м.п</td>
     <td valign="top" width="80"><input data-factor="30" type="number"></td>
</tr>
<tr>
  <td valign="top" width="180">Шпаклевка шва</td>
     <td valign="top" width="80">15 р / шт</td>
     <td valign="top" width="80"><input data-factor="15" type="number"></td>
</tr>
<tr>
  <td valign="top" width="180">Шлифовка шва </td>
     <td valign="top" width="80">36 р / шт</td>
     <td valign="top" width="80"><input data-factor="36" type="number"></td>
</tr>
<tr>
  <td valign="top" width="180">Монтаж на объекте</td>
     <td valign="top" width="80">20%</td>
     <td valign="top" width="80"><input type="checkbox" data-factor=".2"></td>
</tr>
<tr>
  <td valign="top" width="180">Дизайн</td>
     <td valign="top" width="80">30%</td>
     <td valign="top" width="80"><input type="checkbox" data-factor=".3"></td>
</tr>
<tr>
  <td valign="top" width="180">Выезд замерщика</td>
     <td valign="top" width="80">800р </td>
     <td valign="top" width="80"><input type="checkbox" data-up="800"></td>
</tr>
<tr>
  <td valign="top" width="280"><div id="rezz">итог</div></td>

  <td valign="top" width="50"></td>
</tr>

</tbody>
</table>
 </form>

</body>
</html>
Ответить с цитированием
  #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.
Ответить с цитированием
  #20 (permalink)  
Старый 10.04.2017, 11:54
Интересующийся
Отправить личное сообщение для Andree007 Посмотреть профиль Найти все сообщения от Andree007
 
Регистрация: 08.04.2017
Сообщений: 11

спасибо большое !! буду еще читать изучать приемы , ну смысл потихоньку улавливаю ! учту ваши справедливые замечание ! спасибо большое !!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблемы со слайдером. Shupamen Работа 1 15.12.2013 00:12
проблемы с PagingToolbar serg3091 ExtJS 4 26.06.2013 09:33
Проблемы при установке модулей node.js tadjik1 AJAX и COMET 1 18.03.2012 02:20
глюк форума Gvozd Сайт Javascript.ru 11 18.03.2009 14:37
Drug&Drop + всплывание события = проблемы =(( _NoName_ Events/DOM/Window 4 05.03.2009 17:47