Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.03.2017, 15:42
Аспирант
Отправить личное сообщение для dima-kruglyak Посмотреть профиль Найти все сообщения от dima-kruglyak
 
Регистрация: 20.01.2016
Сообщений: 39

Как работать с циклом?
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<div class="block-1">
    <div class="block-1-1"> 
        <input type="text" value="1" class="block-col">
        <input type="text" value="5" class="block-price">
        <span class="block-total"></span>
    </div>
</div>

<div class="block-1">
    <div class="block-1-1"> 
        <input type="text" value="1" class="block-col">
        <input type="text" value="5" class="block-price">
        <span class="block-total"></span>
    </div>
</div>


<script type="text/javascript">

 $(function () {
    $(".block-1").each(function (indx, el) {
        
        $('.block-1-1', el).on('change', 'input', function(event) {
          
            var total = (parseInt($( ".block-col" ).val()) *  parseInt($( ".block-price" ).val()));

            $('.block-total').text(total);
        });
    });
});
</script>


Подскажите плиз как сделать чтобы скрипт выполняться только в блоке в который ввожу значения.

Последний раз редактировалось dima-kruglyak, 26.03.2017 в 15:46.
Ответить с цитированием
  #2 (permalink)  
Старый 26.03.2017, 15:49
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

dima-kruglyak,
<!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() {
 $(".block-1").each(function (indx, el) {
        $(el).on('input', 'input', function(event) {
            var total = (parseInt($( ".block-col", el).val()) *  parseInt($( ".block-price",el ).val()))||"";
             $('.block-total', el).text(total);
        });
    });
});
  </script>
</head>

<body>
<div class="block-1">
    <div class="block-1-1">
        <input type="text" value="1" class="block-col">
        <input type="text" value="5" class="block-price">
        <span class="block-total"></span>
    </div>
</div>

<div class="block-1">
    <div class="block-1-1">
        <input type="text" value="1" class="block-col">
        <input type="text" value="5" class="block-price">
        <span class="block-total"></span>
    </div>
</div>
</body>
</html>
Ответить с цитированием
  #3 (permalink)  
Старый 26.03.2017, 22:24
Аспирант
Отправить личное сообщение для dima-kruglyak Посмотреть профиль Найти все сообщения от dima-kruglyak
 
Регистрация: 20.01.2016
Сообщений: 39

Можете подсказать в где ошибка, начинает считать после второго клика на +
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

<div class="content">
   
    <input type="text" value="200" class="price">
    
    <button class="minus value-control" data-action="minus" data-target="quantity" data-cart-id="1">- </button>
    <input type="text" value="1" id="quantity" min="1" max="10" class="quantity">
    <button class="plus value-control" data-action="plus" data-target="quantity" data-cart-id="1"> + </button>

    <span class="total">200</span> 
</div>

<div class="content">
    <input type="text" value="200" class="price">
    
    <button class="minus value-control" data-action="minus" data-target="quantity" data-cart-id="1">- </button>
    <input type="text" value="1" id="quantity" min="1" max="10" class="quantity">
    <button class="plus value-control" data-action="plus" data-target="quantity" data-cart-id="1"> + </button>

    <span class="total">200</span> 
</div>

<script>

    $(function () {
        $(".content").each(function (indx, el) {

            $(el).on('click', '.value-control', function (event) {

                var total = (parseInt($(".quantity", el).val()) * parseInt($(".price", el).val()));
                $('.total', el).text(total);

                var action = $(this).attr('data-action');
                var target = $(this).attr('data-target');
                var id = $(this).attr("data-cart-id");
                var value = parseFloat($('[id="' + target + '"]', el).val());
                if (action == "plus") {
                    value++;
                }
                if (action == "minus") {
                    value--;
                }
                $('[id="' + target + '"]', el).val(value)
            });
        });
    });
</script>
Ответить с цитированием
  #4 (permalink)  
Старый 26.03.2017, 22:31
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

min="1" max="10" имеют значения только для поля типа number. А получить значение такого поля ни как текст, без лишних преобразований, это value.valueAsNumber.
Ответить с цитированием
  #5 (permalink)  
Старый 27.03.2017, 00:01
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Spinner type number in jquery плюс минус
dima-kruglyak,
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

<div class="content">

    <input type="text" value="200" class="price">

    <button class="minus value-control" data-action="minus" data-target="quantity" data-cart-id="1">- </button>
    <input type="text" value="1" id="quantity" min="1" max="10" class="quantity">
    <button class="plus value-control" data-action="plus" data-target="quantity" data-cart-id="1"> + </button>

    <span class="total">200</span>
</div>

<div class="content">
    <input type="text" value="200" class="price">

    <button class="minus value-control" data-action="minus" data-target="quantity" data-cart-id="1">- </button>
    <input type="text" value="1" id="quantity" min="1" max="10" class="quantity">
    <button class="plus value-control" data-action="plus" data-target="quantity" data-cart-id="1"> + </button>

    <span class="total">200</span>
</div>

<script>

    $(function () {
        $(".content").each(function (indx, el) {

            $(el).on('click', '.value-control', function (event) {
                var action = $(this).attr('data-action');
                var cls = $(this).attr('data-target');
                var add = $(this).attr("data-cart-id");
                var input = $("."+cls, el)[0];
                var min = +input.getAttribute("min");
                var max = +input.getAttribute("max");
                //input.value = +input.value||min;
                input.value -= action == "plus" ? -add : add;
                input.value  = Math.min(Math.max(min,+input.value),max);
                var price = $(".price", el)[0];
                //price.value = +price.value||0;
                var total = price.value * input.value;
                $('.total', el).text(total)
            });
        });
    });
</script>
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как заставить работать вкладки внутри вкладок Vlasenko Fedor Общие вопросы Javascript 3 10.10.2013 16:14
Управление скроллом "а-ля тач" HonesT Элементы интерфейса 2 27.08.2013 14:25
Как работать с процетами? Arkinsstoun Общие вопросы Javascript 3 08.02.2012 01:04
как заставить jQuery работать с переменными gooody jQuery 1 19.02.2010 13:10
Как заставить работать оперу и мозилу? SDone AJAX и COMET 6 25.02.2009 16:05