Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Нужна помощь доработать jquery скрипт пересчета цены от количества (https://javascript.ru/forum/jquery/85743-nuzhna-pomoshh-dorabotat-jquery-skript-perescheta-ceny-ot-kolichestva.html)

Ron 06.02.2024 19:51

Нужна помощь доработать jquery скрипт пересчета цены от количества
 
Помогите если кто сможет, мне нужно доработать jquery скрипт пересчета цены от количества товара на странице сайта. Мне нравится что сразу показывает пересчет без задержки обработки, но нужно что бы скрипт производил одновременно два вычисления после одного нажатия на кнопку. Я пробовал очень много вариантов корректировки скрипта, предыдущий "мой пациент" (на базе которого был сделан нижеприведённый скрипт) считал или одну или другую позицию, но никак не две одновременно, что бы два вычисления в ('.price_here2') и ('.price_here3') обрабатывал одновременно и выводил сразу два результата вычислений на странице соответственно. А этот доработанный скрипт (который по идее может делать сразу два разных вычисления) вообще не производит их ни в одном ни в другом span class="sum_. Что в коде может быть неправильно? Вот сам код:

<div class='price-group2'><span class="price_here2">5500</span><span class="sum_here2"></span></div>
<button onclick="qminus('#qty');" id="minus">
<i class="ones"> Кол-во</i>
</button>
<input type="number" value="1" style="width:30px" onchange="check_qty($(this),1,100);" name="qty" id="qty" value="<? echo $qty ?>" />
<button onclick="qplus('#qty');"><i>Цена монтажа</i>
</button><div class='price-group3'><span class="price_here3">2000</span><span class="sum_here3"></span></div>


<script>
function qminus(el, min) {
var e = $(el);
var compare = parseInt(e.val());
var i = ((compare - 1) < min) ? min : compare - 1;
e.val(i);
show_price(i);
}
function qplus(el, max) {
var e = $(el);
var compare = parseInt(e.val());
var i = ((compare + 1) > max) ? max : compare + 1;
e.val(i);
show_price(i);
}
function check_qty(el, min, max) {
var compare = parseInt(el.val());
if (compare < min) {
el.val(min);
alert(min + ' is minimal qty');
}
if (compare > max) {
el.val(max);
alert(max + ' is maximum qty');
}
show_price(el.val());
}
function show_price(ch) {
$('.price-group2').each(function() {
$('.sum-here2', this).text(
$('.price-here2', this).text() * ch
);
});
}
</script>
<script>
function qminus(el, min) {
var e = $(el);
var compare = parseInt(e.val());
var i = ((compare - 1) < min) ? min : compare - 1;
e.val(i);
show_price(i);
}
function qplus(el, max) {
var e = $(el);
var compare = parseInt(e.val());
var i = ((compare + 1) > max) ? max : compare + 1;
e.val(i);
show_price(i);
}
function check_qty(el, min, max) {
var compare = parseInt(el.val());
if (compare < min) {
el.val(min);
alert(min + ' is minimal qty');
}
if (compare > max) {
el.val(max);
alert(max + ' is maximum qty');
}
show_price(el.val());
}
function show_price(ch) {
$('.price-group3').each(function() {
$('.sum-here3', this).text(
$('.price-here3', this).text() * ch
);
});
}
</script>

voraa 06.02.2024 20:09

У вас функции qminus, qplus, check_qty и проч. по 2 раза определяются.
Так в js нельзя.

рони 06.02.2024 21:27

Ron,
Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[html run]
... минимальный код страницы с вашей проблемой
[/html]

О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.

Ron 06.02.2024 23:40

А если такой вариант скрипта рассмотреть как возможный для исполнения одновременно двух вычислений по нажатию одной кнопки

<span id="price_here">5500</span><span hidden="hidden" id="price_here">5500</span><span id="sum_here1"></span>
<button onclick="qminus('#qty');" class="SyncButton" id="minus">
<i> Кол-во</i>
</button>
<input type="number" value="1" style="width:30px" onchange="check_qty($(this),1,100);" name="qty" id="qty" value="<? echo $qty ?>" />▶
<button onclick="qplus('#qty');"><i>Цена монтажа</i>
</button><span id="sum_here"></span>


<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script>
function qminus(el, min) {
var e = $(el);
var compare = parseInt(e.val());
var i = ((compare - 1) < min) ? min : compare - 1;
e.val(i);
show_price($('#sum_here1'), $('#price_here1'), i);
}
function qplus(el, max) {
var e = $(el);
var compare = parseInt(e.val());
var i = ((compare + 1) > max) ? max : compare + 1;
e.val(i);
show_price($('#sum_here1'), $('#price_here1'), i);
}
function check_qty(el, min, max) {
var compare = parseInt(el.val());
if (compare < min) {
el.val(min);
alert(min + ' is minimal qty');
}
if (compare > max) {
el.val(max);
alert(max + ' is maximum qty');
}
show_price($('#sum_here1'), $('#price_here1'), el.val());
}
function show_price(el, pr, ch) {
var sum = pr.html() * ch;
el.html(sum);
}
</script>
<script>
function qminus(el, min) {
var e = $(el);
var compare = parseInt(e.val());
var i = ((compare - 1) < min) ? min : compare - 1;
e.val(i);
show_price($('#sum_here'), $('#price_here'), i);
}
function qplus(el, max) {
var e = $(el);
var compare = parseInt(e.val());
var i = ((compare + 1) > max) ? max : compare + 1;
e.val(i);
show_price($('#sum_here'), $('#price_here'), i);
}
function check_qty(el, min, max) {
var compare = parseInt(el.val());
if (compare < min) {
el.val(min);
alert(min + ' is minimal qty');
}
if (compare > max) {
el.val(max);
alert(max + ' is maximum qty');
}
show_price($('#sum_here'), $('#price_here'), el.val());
}
function show_price(el, pr, ch) {
var sum = pr.html() * ch;
el.html(sum);
}
</script>

voraa 07.02.2024 07:40

Вы читать умеете?
Цитата:

Сообщение от voraa
У вас функции qminus, qplus, check_qty и проч. по 2 раза определяются.

То, что они в разных <script>...</script> ничего не значит.

Что то типа накого
<span id="price_here">5500</span>
<span hidden="hidden" id="price_here">5500</span>
<span id="sum_here1"></span>
<button onclick="qminus('#qty'); qminus1('#qty');" class="SyncButton" id="minus">
	<i> Кол-во</i>
</button>
<input type="number" value="1" style="width:30px" onchange="check_qty($(this),1,100);" name="qty" id="qty" value="<? echo $qty ?>" />▶
<button onclick="qplus('#qty'); qplus1('#qty');">
	<i>Цена монтажа</i>
</button>
<span id="sum_here"></span>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script>

function qminus1(el, min) {
	var e = $(el);
	var compare = parseInt(e.val());
	var i = ((compare - 1) < min) ? min : compare - 1;
	e.val(i);
	show_price1($('#sum_here1'), $('#price_here1'), i);
}

function qplus1(el, max) {
	var e = $(el);
	var compare = parseInt(e.val());
	var i = ((compare + 1) > max) ? max : compare + 1;
	e.val(i);
	show_price1($('#sum_here1'), $('#price_here1'), i);
}

function check_qty1(el, min, max) {
	var compare = parseInt(el.val());
	if (compare < min) {
		el.val(min);
		alert(min + ' is minimal qty');
	}
	if (compare > max) {
		el.val(max);
		alert(max + ' is maximum qty');
	}
	show_price1($('#sum_here1'), $('#price_here1'), el.val());
	show_price($('#sum_here'), $('#price_here'), el.val());

}

function show_price1(el, pr, ch) {
	var sum = pr.html() * ch;
	el.html(sum);
}

</script>
<script>

function qminus(el, min) {
	var e = $(el);
	var compare = parseInt(e.val());
	var i = ((compare - 1) < min) ? min : compare - 1;
	e.val(i);
	show_price($('#sum_here'), $('#price_here'), i);
}

function qplus(el, max) {
	var e = $(el);
	var compare = parseInt(e.val());
	var i = ((compare + 1) > max) ? max : compare + 1;
	e.val(i);
	show_price($('#sum_here'), $('#price_here'), i);
}


function show_price(el, pr, ch) {
	var sum = pr.html() * ch;
	el.html(sum);
}

</script>

Ron 08.02.2024 13:42

Здравствуйте.
Большое Вам спасибо, что смогли доработать скрипт, очень вам признателен. Я его немного изменил под свои нужды, но он всё равно работает не так функционально как требуется. Высылаю вам подработанный мной рабочий вариант этого скрипта, но только я не могу никак устранить пару багов,
1. Первый баг, что когда нажимаешь кнопку <button onclick="qplus('#qty'); qplus1('#qty');"><i>Цена монтажа</i></button> то скрипт в счётчике количества (вычислений) сразу перескакивает с цифры 1 на 3, потом на 5 и т.д через две позиции при каждом нажатии "Цена монтажа", но при этом считает суммы правильно.
2. Второй баг, заключается в том, что когда, сначала нажмёшь кнопку "Цена монтажа" (суммы считаются), а потом когда нажимаешь на кнопку "Кол-во" (которая имеет функцию "назад", и должна уменьшать обратно сумму вычислений) <button onclick="qminus('#qty'); qminus1('#qty');" id="minus"><i> Кол-во</i></button> то скрипт не уменьшает сумму на 5500, а наоборот единоразово её увеличивает на 5500, но при этом в поле суммы "Цена монтажа" всё остается без изменений.
Помогите пожалуйста разобраться с данными проблемами.
Вот код этого скрипта:

<span id="price_here" hidden="hidden">5500</span><span id="sum_here">5500</span>
<button onclick="qminus('#qty'); qminus1('#qty');" id="minus"><i> Кол-во</i></button>
<input type="number" value="1" style="width:30px" onchange="check_qty($(this),1,100);" name="qty" id="qty" value="<? echo $qty ?>" /><button onclick="qplus('#qty'); qplus1('#qty');"><i>Цена монтажа</i></button>
<span id="sum_here1"></span>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script>
function qminus1(el, min) {
var e = $(el);
var compare = parseInt(e.val());
var i = ((compare - 1) < min) ? min : compare - 0;
e.val(i);
show_price1($('#sum_here1'), $('#price_here'), i);
}

function qplus1(el, max) {
var e = $(el);
var compare = parseInt(e.val());
var i = ((compare + 1) > max) ? max : compare + 1;
e.val(i);
show_price1($('#sum_here1'), $('#price_here'), i);
}

function check_qty1(el, min, max) {
var compare = parseInt(el.val());
if (compare < min) {
el.val(min);
alert(min + ' is minimal qty');
}
if (compare > max) {
el.val(max);
alert(max + ' is maximum qty');
}
show_price1($('#sum_here1'), $('#price_here'), el.val());

}

function show_price1(el, pr, ch) {
var sum = pr.html() * ch;
el.html(sum*0.02);
}

</script>
<script>
function qminus(el, min) {
var e = $(el);
var compare = parseInt(e.val());
var i = ((compare - 1) < min) ? min : compare - 0;
e.val(i);
show_price($('#sum_here'), $('#price_here'), i);
}

function qplus(el, max) {
var e = $(el);
var compare = parseInt(e.val());
var i = ((compare + 1) > max) ? max : compare + 1;
e.val(i);
show_price($('#sum_here'), $('#price_here'), i);
}


function show_price(el, pr, ch) {
var sum = pr.html() * ch;
el.html(sum);
}
</script>

Ron 08.02.2024 14:31

Здравствуйте.
Большое Вам спасибо, что смогли доработать скрипт, очень вам признателен. Я его немного изменил под свои нужды, но он всё равно работает не так функционально как требуется. Высылаю вам подработанный мной рабочий вариант этого скрипта, но только я не могу никак устранить пару багов,
1. Первый баг, что когда нажимаешь кнопку <button onclick="qplus('#qty'); qplus1('#qty');"><i>Цена монтажа</i></button> то скрипт в счётчике количества (вычислений) сразу перескакивает с цифры 1 на 3, потом на 5 и т.д через две позиции при каждом нажатии "Цена монтажа", но при этом считает суммы правильно.
2. Второй баг, заключается в том, что когда, сначала нажмёшь кнопку "Цена монтажа" (суммы считаются), а потом когда нажимаешь на кнопку "Кол-во" (которая имеет функцию "назад", и должна уменьшать обратно сумму вычислений) <button onclick="qminus('#qty'); qminus1('#qty');" id="minus"><i> Кол-во</i></button> то скрипт не уменьшает сумму на 5500, а наоборот единоразово её увеличивает на 5500, но при этом в поле суммы "Цена монтажа" всё остается без изменений.
Помогите пожалуйста разобраться с данными проблемами.
Вот код этого скрипта:

<span id="price_here" hidden="hidden">5500</span><span id="sum_here">5500</span>
<button onclick="qminus('#qty'); qminus1('#qty');" id="minus"><i> Кол-во</i></button>
<input type="number" value="1" style="width:30px" onchange="check_qty($(this),1,100);" name="qty" id="qty" value="<? echo $qty ?>" /><button onclick="qplus('#qty'); qplus1('#qty');"><i>Цена монтажа</i></button>
<span id="sum_here1"></span>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script>
function qminus1(el, min) {
var e = $(el);
var compare = parseInt(e.val());
var i = ((compare - 1) < min) ? min : compare - 0;
e.val(i);
show_price1($('#sum_here1'), $('#price_here'), i);
}

function qplus1(el, max) {
var e = $(el);
var compare = parseInt(e.val());
var i = ((compare + 1) > max) ? max : compare + 1;
e.val(i);
show_price1($('#sum_here1'), $('#price_here'), i);
}

function check_qty1(el, min, max) {
var compare = parseInt(el.val());
if (compare < min) {
el.val(min);
alert(min + ' is minimal qty');
}
if (compare > max) {
el.val(max);
alert(max + ' is maximum qty');
}
show_price1($('#sum_here1'), $('#price_here'), el.val());

}

function show_price1(el, pr, ch) {
var sum = pr.html() * ch;
el.html(sum*0.02);
}

</script>
<script>
function qminus(el, min) {
var e = $(el);
var compare = parseInt(e.val());
var i = ((compare - 1) < min) ? min : compare - 0;
e.val(i);
show_price($('#sum_here'), $('#price_here'), i);
}

function qplus(el, max) {
var e = $(el);
var compare = parseInt(e.val());
var i = ((compare + 1) > max) ? max : compare + 1;
e.val(i);
show_price($('#sum_here'), $('#price_here'), i);
}


function show_price(el, pr, ch) {
var sum = pr.html() * ch;
el.html(sum);
}
</script>

voraa 08.02.2024 14:58

А какой смысл считать в разных функциях? Их же объединить можно.

Так пробуйте
<span id="price_here" hidden="hidden">5500</span>
<span id="sum_here">5500</span>
<button onclick="qminus('#qty', 1);" id="minus"><i> Кол-во</i></button>
<input type="number" value="1" style="width:30px" onchange="check_qty($(this),1,100);" name="qty" id="qty" value="<? echo $qty ?>" />
<button onclick="qplus('#qty', 100);"><i>Цена монтажа</i></button>
<span id="sum_here1"></span>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<script>

function qminus(el, min) {
	var e = $(el);
	var compare = parseInt(e.val());
	var i = (compare  <= min) ? min : compare - 1;
	e.val(i);
	show_price($('#sum_here'), $('#price_here'), i);
	show_price1($('#sum_here1'), $('#price_here'), i);
}


function qplus(el, max) {
	var e = $(el);
	var compare = parseInt(e.val());
	var i = (compare >= max) ? max : compare + 1;
	e.val(i);
	show_price($('#sum_here'), $('#price_here'), i);
	show_price1($('#sum_here1'), $('#price_here'), i);
}


function check_qty(el, min, max) {
	var compare = parseInt(el.val());
	if (compare < min) {
		el.val(min);
		alert(min + ' is minimal qty');
	}
	if (compare > max) {
		el.val(max);
		alert(max + ' is maximum qty');
	}
	show_price1($('#sum_here1'), $('#price_here'), el.val());
}

function show_price(el, pr, ch) {
	var sum = pr.html() * ch;
	el.html(sum);
}
function show_price1(el, pr, ch) {
	var sum = pr.html() * ch;
	el.html(sum*0.02);
}

</script>

Ron 08.02.2024 16:37

Уважаемый Профессор, еще раз выражаю Вам огромнейшую благодарность, спасибо за помощь! Теперь скрипт заработал так как нужно. Желаю Вам всего самого наилучшего, удачи во всем и всех благ!

Ron 08.02.2024 20:52

Извините, хотел бы еще раз у вас посоветоваться, может вы знаете, какое можно прописать регулярное выражение в редакторах Notepad++ или Sublime, что бы умножать на определённый коэффициент числовые значения (цифры без запятых, дробей и т.п., просто обычные цифры) находящиеся в большом количестве html страниц например 5500 между тегами как в том скрипте, который вы так прекрасно доработали<span id="price_here" hidden="hidden">5500</span>. Я читал, что в Notepad++ массово изменять цифровые значения не так то просто, может в Sublime, это можно проще сделать (без особых сложностей) т.к. про работу в Sublime в интернете очень мало информации. Еще раз спасибо, что с скриптом помогли мне.

voraa 08.02.2024 22:20

Не пользуюсь ни тем, ни другим.
Это так себе решение.
У вас же страница генерится на php.
Ну и задайте константу (или переменную с постоянным значением)
типа
$c_price = "5500";
А потом, где надо
<span id="price_here" hidden="hidden"><?=$c_price?></span>

Ron 09.02.2024 12:54

Если честно, с php вообще никогда не сталкивался. Если можно, то опишите немного более подробно процедуру реализации данного способа по массовой замене цифровых значений в тегах (какой программой или онлайн ресурсом можно воспользоваться, как правильно туда вписать регулярное выражение, что бы менять цифры в таком формате тегов <span id="price_here" hidden="hidden">5500</span>).

voraa 09.02.2024 21:06

Цитата:

Сообщение от Ron
Если честно, с php вообще никогда не сталкивался.

Вот это что?
<input type="number" value="1" style="width:30px" onchange="check_qty($(this),1,100);" name="qty" id="qty" value="<? echo $qty ?>" />

То, что после value= ?

Ron 09.02.2024 23:03

Я попробую разобраться, в том что вы имели ввиду, в виде подсказки "То, что после value= ?". Я так понял, что нужно "копать" в направлении привязки оператора переменной <? echo $qty ?> т.к. этот оператор дает команду скрипту брать для вычисления цифру 5500 (или какая там будет стоять) указанному в <span id="sum_here">5500</span> и корректировать на другую через $c_price = "5500";. Попробую, если смогу конечно понять как это можно сделать, но есть "смутные сомнения", что для меня это будет выше уровня моей подготовки. Проблема еще в том, что мне необходимо эти разные цифры, которые будут на страницах сайта в полях <span id="sum_here"></span>, еще к тому же умножать на коэффициент 1,2. Не знаю получится ли, но попробую. В любом случае признателен Вам, за подсказку.

voraa 10.02.2024 09:13

Цитата:

Сообщение от Ron
<? echo $qty ?> т.к. этот оператор дает команду скрипту брать для вычисления цифру 5500

Какому скрипту? Это чисто команда php.
Где находится ваша страница? На сервере? Как называется файл с этой станицей?


Часовой пояс GMT +3, время: 20:08.