В чем ошибка
Значение через
$('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, время: 21:46. |