Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #41 (permalink)  
Старый 26.02.2017, 21:27
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

MixPetrov,

data-maximum="125" data-minimum="10"
<!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() {
    function mathC() {
        var nmb = +this.dataset.nmb;
        var ns = +this.value.replace(/\D/g, "") || 0;
        ns = Math.ceil(ns / nmb) * nmb;
        this.value = ns
    }

    function is() {
        var maximum = +this.dataset.maximum;
        var minimum = +this.dataset.minimum;
        var ns = +this.value.replace(/\D/g, "") || 0;
        if (ns > maximum) ns = maximum;
        if (ns < minimum) ns = minimum;
        this.value = ns;
    }
    var timer;
    $('.quantity_cart [type="text"]').on("input", function() {
        window.clearTimeout(timer);
        var self = this;
        timer = window.setTimeout(function() {
                mathC.bind(self)();
                is.bind(self)()
            },1200)
    })
});
  </script>



  </script>
</head>

<body>

<div class="quantity_cart">


        <input type="text" name="product_id" size="2" value="20" data-maximum="125" quantity="125" data-minimum="10" data-nmb="10" type="text">


        </div>


</body>
</html>

Последний раз редактировалось рони, 26.02.2017 в 21:31.
Ответить с цитированием
  #42 (permalink)  
Старый 26.02.2017, 21:43
Аспирант
Отправить личное сообщение для MixPetrov Посмотреть профиль Найти все сообщения от MixPetrov
 
Регистрация: 12.10.2016
Сообщений: 53

Спасибо, но в данном случае лучше когда на каждую функцию свой таймер. Эти функции находятся в файле *.php и выполняются в правильном порядке, но есть еще одна функция она написана в файле *.js и она выполняется самой первой, а надо чтобы выполнялась последней.
Ответить с цитированием
  #43 (permalink)  
Старый 26.02.2017, 22:20
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

MixPetrov,
не осилил
Ответить с цитированием
  #44 (permalink)  
Старый 26.02.2017, 22:55
Аспирант
Отправить личное сообщение для MixPetrov Посмотреть профиль Найти все сообщения от MixPetrov
 
Регистрация: 12.10.2016
Сообщений: 53

Работа скриптов должна выстраивается в следующем порядке -
mathC - округляет value;
is - задает верхнюю и нижнюю границы для value (max i min);
recalc - умножает value на стоимость.

В данное время скрипты выполняются в следующем порядке:
recalc;
mathC;
is.

Все скрипты выполняются при oninput
Ответить с цитированием
  #45 (permalink)  
Старый 26.02.2017, 23:10
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

MixPetrov,
думайте сами у меня вариантов нет, но затруднять ввод клиентом данных плохая практика, возможен только запрет на не цифровые символы, выводить результат надо в другом месте, а не в том которое используют для ввода.
Ответить с цитированием
  #46 (permalink)  
Старый 26.02.2017, 23:23
Аспирант
Отправить личное сообщение для MixPetrov Посмотреть профиль Найти все сообщения от MixPetrov
 
Регистрация: 12.10.2016
Сообщений: 53

Результат функции recalc выводится в другом месте.

Выведен HTML в firebug
<div class="quantity_cart">

<input name="2" size="2"  value="20" data-maximum="125" quantity="125" data-minimum="20" data-nmb="10" data-prc="0.8400" type="text" oninput="recalc(2);"> // здесь выполнются функции recalc -> mathC -> is.

</div>
<div class="price">
<span class="change-price2" price="0.8400">4.20USD</span> // здесь выводится результат recalc
</div>


function recalc(product_id) { // скрипт находится в отдельном файле и выполняется первым, а должен выполняться последним
		var quantity = $('input[name="' + product_id + '"]').val();
		var quantity = typeof(quantity) != 'undefined' ? quantity : 1;
		var options_price = 0;
		var price_no_format = Number($('.change-price'+product_id).attr('price'));
		var special_no_format = Number($('.change-special'+product_id).attr('price'));
		var new_price = (price_no_format + options_price) * quantity;
		var new_special = (special_no_format + options_price) * quantity;
		$('.change-price' + product_id).html(price_format(new_price)); // вывод значения после пересчета
		$('.change-special' + product_id).html(price_format(new_special));
	}

Последний раз редактировалось MixPetrov, 26.02.2017 в 23:44.
Ответить с цитированием
  #47 (permalink)  
Старый 26.02.2017, 23:30
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

MixPetrov,
...

<!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() {
    $(".quantity_cart").each(function(indx, el) {
        var input = $("input", el)[0];
        var nmb = +input.dataset.nmb;
        var value = +input.value;
        var maximum = +input.dataset.maximum;
        var minimum = +input.dataset.minimum;
        var prc = +input.dataset.prc;

        function setValue() {
            var ns = +input.value.replace(/\D/g, "") || 0;
            ns = Math.ceil(ns / nmb) * nmb;
            value = ns
        }

        function limit() {
            return value = Math.min(Math.max(minimum, value), maximum)
        }

        function add(x) {
            return value += x * nmb
        }
        var span = $("div.price").eq(indx).find("span");

        function show() {
            input.value = value;
            var sum = (value * prc).toFixed(2) + "USD";
            span.text(sum)
        }
        show();
        var timer;
        $(el).on("click", ".minus, .plus", function() {
            var x = $(this).is(".minus") ? -1 : 1;
            add(x);
            limit();
            show()
        }).on("input", function() {
            window.clearTimeout(timer);
            timer = window.setTimeout(function() {
                setValue();
                limit();
                show()
            }, 1200)
        })
    })
});
  </script>
</head>

<body>
<div class="quantity_cart">
<span class="minus" ><</span>
<input name="2" size="2" oninput="recalc(2);" value="20" data-maximum="120"  data-minimum="20" data-nmb="10" data-prc="0.8400" type="text">
<span class="plus" >></span>
</div>
<div class="price">
<span class="change-price" ></span>
</div>


</body>
</html>

Последний раз редактировалось рони, 27.02.2017 в 00:17.
Ответить с цитированием
  #48 (permalink)  
Старый 26.02.2017, 23:42
Аспирант
Отправить личное сообщение для MixPetrov Посмотреть профиль Найти все сообщения от MixPetrov
 
Регистрация: 12.10.2016
Сообщений: 53

Так и есть
Ответить с цитированием
  #49 (permalink)  
Старый 27.02.2017, 00:11
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

MixPetrov,
медитируйте код выше и числа должны быть кратны data-nmb
Ответить с цитированием
  #50 (permalink)  
Старый 27.02.2017, 02:45
Аспирант
Отправить личное сообщение для MixPetrov Посмотреть профиль Найти все сообщения от MixPetrov
 
Регистрация: 12.10.2016
Сообщений: 53

рони, Вы просто Бог в своем деле!

Подскажите как вычленить кусок из кода в котором происходит перемножение и подмена значения в <div class="price">
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В чем ошибка применения функции borus Общие вопросы Javascript 5 19.09.2014 23:53
В чем ошибка при выводе таблицы? KamalovRadik Серверные языки и технологии 3 18.02.2012 14:30
$('[value=aaa bbb]') в чем ошибка?? iNfantry jQuery 2 31.01.2012 12:57
Ошибка вызова замыкания Андрей Параничев Общие вопросы Javascript 8 01.10.2008 21:16
не могу понять в чём ошибка scuter Общие вопросы Javascript 2 28.08.2008 15:22