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 в интернете очень мало информации. Еще раз спасибо, что с скриптом помогли мне.


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