В чем ошибка
Значение через
$('input[name=\'' + product_id + '\']').val()получается, а вот изменение и подстановка не нового значения в value не выполняется. function isright(product_id) { var ns = $('input[name=\'' + product_id + '\']').val().value.replace(/\D/g,'')||0; if (ns>50) ns=$('input[name=\'' + product_id + '\']').val(50); if (ns<10) ns=$('input[name=\'' + product_id + '\']').val(10); $('input[name=\'' + product_id + '\']').val() = ns } |
MixPetrov,
http://api.jquery.com/val/ |
MixPetrov,
:( function isright(product_id) { var ns = +($('input[name=\'' + product_id + '\']').val().replace(/\D/g,''))||0; if (ns>50) ns=50; if (ns<10) ns=10; $('input[name=\'' + product_id + '\']').val(ns) } |
Спасибо огромное!
А вот почему происходит следующее: при вводе допустим 15 выпадает сразу 50. |
MixPetrov,
проверьте пост №3 снова |
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() { function isright() { var ns = +this.value.replace(/\D/g, "") || 0; if (ns > 50) ns = 50; if (ns < 10) ns = 10; this.value = ns } var timer; $(".num").on("input", function() { window.clearTimeout(timer); timer = window.setTimeout(isright.bind(this), 1200) }) }); </script> </head> <body> <input class="num"> <input class="num"> </body> </html> |
В общем проблема в том, не происходит сброс в валуе в ноль и автоматом считает что вводишь не 15, а 1015.
Но если убрать нижний предел то все отлично. Еще раз спасибо. И еще маленький вопрос если в php в div class'e в value задать атрибут maximum передастся ли он параметром в функцию "function isright(product_id), maximum"? |
MixPetrov,
не понимаю, но лучше использовать input type=number c min и max |
Лучше, но в данном случае надо через input type=text.
По "И еще маленький вопрос...." Сам input <input name="1" oninput="isright(1); recalc(1);" size="2" value="1" maximum="4" type="text"> <input name="2" oninput="isright(2); recalc(2);" size="2" value="1" maximum="125" type="text"> <input name="3" oninput="isright(3); recalc(3);" size="2" value="1" maximum="76" type="text"> maximum="4" = maximum="<?php echo $product['quantity']; ?>" Предастся ли maximum="4" в код js через параметр функции "function isright(product_id, maximum) {...} ? Или как передать значение maximum? |
MixPetrov,
да |
Пробовал так:
function isright(product_id, maximum) { var ns = +($('input[name=\'' + product_id + '\']').val().replace(/\D/g,''))||0; if (ns>maximum) ns=maximum; //if (ns<10) ns=10; $('input[name=\'' + product_id + '\']').val(ns) } Так: function isright(product_id, maximum) { var ns = +($('input[name=\'' + product_id + '\']').val().replace(/\D/g,''))||0; var ms = $('input[name=\'' + product_id + '\']').val(maximum); if (ns>ms) ns=ms; //if (ns<10) ns=10; $('input[name=\'' + product_id + '\']').val(ns) } Так: function isright(product_id, maximum) { var ns = +($('input[name=\'' + product_id + '\']').val().replace(/\D/g,''))||0; if (ns>$('input[name=\'' + product_id + '\']').val(maximum);) ns=$('input[name=\'' + product_id + '\']').val(maximum);; //if (ns<10) ns=10; $('input[name=\'' + product_id + '\']').val(ns) } Не получилось |
MixPetrov,
1 вариант должен работать |
Увы(
|
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 isright(product_id, maximum) { var ns = +($('input[name=\'' + product_id + '\']').val().replace(/\D/g,''))||0; if (ns>maximum) ns=maximum; //if (ns<10) ns=10; $('input[name=\'' + product_id + '\']').val(ns) } $(function() { isright(1,4) //test }); </script> </head> <body> <input name="1" oninput="isright(1,4);" size="2" value="89998мимими" maximum="4" type="text"> </body> </html> |
Работает замечательно, maximum срабатывает один для всех, а как передать этот параметр для конкретного inputa?
|
Цитата:
|
Понял, Огромное спасибо!!! Все работает!
|
Подскажите можно ли каким то образом через событие oninput получить в округление полное значение value?
в данном случае округление срабатывает, но каждая введенная цифра округляется отдельно. К примеру при вводе 11 получается 33 т.е. первая 1 округляется до 3 и вторая единица тоже округляется до 3. Через событие onchange работает правильно, но хотелось бы через oninput. <!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 mathC(nmb, rnd) { var ns = +$('input[name=\'' + nmb + '\']').val(); ns = ns || 0; ns = Math.ceil(ns/rnd)*rnd; $('input[name=\'' + nmb + '\']').val(ns) } $(function() { mathC(1,3) //test }); </script> </head> <body> <input name="1" oninput="mathC(1,3);" size="2" value="1" type="text"> </body> </html> |
MixPetrov,
можно ввести задержку, смотрите пост №6 |
Через файл *.js
$ (function () { function mathC(product_id, nmb){ var ns = +$('input[name=\'' + product_id + '\']').val(); ns = ns || 0; ns = Math.ceil(ns/nmb)*nmb; $('input[name=\'' + product_id + '\']').val(ns) } var timer; $('.quantity_cart [type="text"]').on("input", function() { window.clearTimeout(timer); timer = window.setTimeout(mathC.bind(this), 1200) }) }); Через *.php <script type="text/javascript"> $ (function() { $('.quantity_cart input[type="text"]').on("input", function() { var timer; window.clearTimeout(timer); timer = window.setTimeout(mathC.bind(this), 1200) }) }); </script> Не срабатывает |
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> <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css"> <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script> <script> $ (function () { function mathC(){ var nmb = +this.dataset.nmb; var ns = +this.value; ns = ns || 0; ns = Math.ceil(ns/nmb)*nmb; this.value = ns } var timer; $('.quantity_cart [type="text"]').on("input", function() { window.clearTimeout(timer); timer = window.setTimeout(mathC.bind(this), 1200) }) }); </script> </head> <body class="quantity_cart"> <input name="1" size="2" value="1" type="text" data-nmb="3"> <input name="1" size="2" value="1" type="text" data-nmb="3"> </body> </html> |
Не работает
А можно ли к функции подключить таймер без $('.quantity_cart [type="text"]').on("input", function() $ (function () { function mathC(){ var nmb = +($('input[name=\'' + product_id + '\']').val().dataset.nmb); // var ns = +this.value; //ns = ns || 0; //ns = Math.ceil(ns/nmb)*nmb; //this.value = ns var ns = +$('input[name=\'' + product_id + '\']').val(); ns = ns || 0; ns = Math.ceil(ns/nmb)*nmb; $('input[name=\'' + product_id + '\']').val(ns) } var timer; $('.quantity_cart [type="text"]').on("input", function() { window.clearTimeout(timer); timer = window.setTimeout(mathC.bind(this), 1200) }) }); |
MixPetrov,
пас |
Подскажите в чем делаю ошибку?
$ (function () { function mathC(){ var nmb = +($('input[name=\'' + product_id + '\']').val().dataset.nmb); // var ns = +this.value; //ns = ns || 0; //ns = Math.ceil(ns/nmb)*nmb; //this.value = ns var ns = +$('input[name=\'' + product_id + '\']').val(); ns = ns || 0; ns = Math.ceil(ns/nmb)*nmb; $('input[name=\'' + product_id + '\']').val(ns) } var timer; $('.quantity_cart [type="text"]').on("input", function() { window.clearTimeout(timer); timer = window.setTimeout(mathC.bind(this), 1200) }) }); |
MixPetrov,
вы пишите бред, переменная product_id с неба прилетит. Цитата:
|
Согласен с выше написанным.
В файле js $ (function () { function mathC(product_id, nmb){ var nmb = +($('input[name=\'' + product_id + '\']').val().dataset.nmb); // var ns = +this.value; //ns = ns || 0; //ns = Math.ceil(ns/nmb)*nmb; //this.value = ns var ns = +$('input[name=\'' + product_id + '\']').val(); ns = ns || 0; ns = Math.ceil(ns/nmb)*nmb; $('input[name=\'' + product_id + '\']').val(ns) } var timer; $('.quantity_cart [type="text"]').on("input", function() { window.clearTimeout(timer); timer = window.setTimeout(mathC, 1200) }) }); В файле php (firebug) <div class="quantity_cart"> <span class="minus" onclick="quantity(2, '-10', '20', '125')"><</span> <input name="2" oninput="mathC(2,10); isright(2,125,20); recalc(2);" size="2" value="20" maximum="125" quantity="125" minimum="10" data-nmb="10" type="text"> <span class="plus" onclick="quantity(2, '+10', '10', '125')">></span> </div> |
MixPetrov,
не будет работать |
Куда копать?
|
|
Спасибо
|
Можете дать ссылки на информацию о передаче переменных и их значений между файлами. Буду очень признателен.
|
MixPetrov,
я не могу вам помочь. |
На самом деле Вы уже очень помогли.
Скажите почему так работать не будет? В файле js $ (function () { function mathC(product_id, nmb){ var nmb = +($('input[name=\'' + product_id + '\']').val().dataset.nmb); // var ns = +this.value; //ns = ns || 0; //ns = Math.ceil(ns/nmb)*nmb; //this.value = ns var ns = +$('input[name=\'' + product_id + '\']').val(); ns = ns || 0; ns = Math.ceil(ns/nmb)*nmb; $('input[name=\'' + product_id + '\']').val(ns) } var timer; $('.quantity_cart [type="text"]').on("input", function() { window.clearTimeout(timer); timer = window.setTimeout(mathC, 1200) }) }); В файле php (firebug) <div class="quantity_cart"> <span class="minus" onclick="quantity(2, '-10', '20', '125')"><</span> <input name="2" oninput="mathC(2,10); isright(2,125,20); recalc(2);" size="2" value="20" maximum="125" quantity="125" minimum="10" data-nmb="10" type="text"> <span class="plus" onclick="quantity(2, '+10', '10', '125')">></span> </div> :thanks: Пойду азы изучать |
Цитата:
Цитата:
выберите что-то одно либо onclick, либо addEventListener, либо jquery -- лучше addEventListener |
oninput="mathC(2,10);
где 2 = <?php echo $product['product_id']; ?> - переменная product_id |
Переменные передаются округление работает, не подключается settimeout
|
Ребят, помогите объясните где не так делаю, уже в голове не то что каша а пена просто. $ (function () { function mathC(product_id, nmb){ // сюда не приходят значения product_id и nmb var nmb = +($('input[name=\'' + product_id + '\']').val().dataset.nmb); // здесь похоже не правильно var ns = +$('input[name=\'' + product_id + '\']').val(); ns = ns || 0; ns = Math.ceil(ns/nmb)*nmb; $('input[name=\'' + product_id + '\']').val(ns) } var timer; $('.quantity_cart [type="text"]').on("input", function() { window.clearTimeout(timer); timer = window.setTimeout(mathC, 1200) }) }); <div class="quantity_cart"> <input type="text" name="product_id" oninput="mathC($product_id,$nmb);" size="2" value="20" maximum="125" quantity="125" minimum="10" data-nmb="10" type="text"> </div> |
Цитата:
|
Paguo-86PK,
ему надо чтобы данные из oninput перекочевали в jquery --- все возможные решения уже даны в теме, но не помогло, тс продолжает лепить отсебятину, хаотически смешивая все варианты. |
рони,
Спасибо! нашел свою ошибку задержка срабатывает отлично. А можно ли скриптам задать порядок выполнения. скрипты в *.js выполняются первыми. Можно ли в <div class="quantity_cart"> <input type="text" name="product_id" size="2" value="20" maximum="125" quantity="125" minimum="10" data-nmb="10" type="text"> </div> указать скриптам последовательность выполнения? Что б было как то так: <input type="text" name="product_id" size="2" oninput="function(mathC);function(is);recalc(product_id)" value="20" maximum="125" quantity="125" minimum="10" data-nmb="10" type="text"> <script type="text/javascript"> $ (function () { function mathC(){ var nmb = +this.dataset.nmb; var ns = +this.value; ns = ns || 0; ns = Math.ceil(ns/nmb)*nmb; this.value = ns //alert(nmb); } var timer; $('.quantity_cart [type="text"]').on("input", function() { window.clearTimeout(timer); timer = window.setTimeout(mathC.bind(this), 1200) //alert($('.quantity_cart [type="text"]')); }) }); </script> <script type="text/javascript"> $ (function () { 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 alert(maximum); } var timer; $('.quantity_cart [type="text"]').on("input", function() { window.clearTimeout(timer); timer = window.setTimeout(is.bind(this), 1400) //alert($('.quantity_cart [type="text"]')); }) }); </script> |
Часовой пояс GMT +3, время: 12:57. |