Нужна помощь доработать jquery скрипт пересчета цены от количества товара

Фтещт4568

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

HTML:
<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>
 

BaNru

Пацифизжу
Команда форума
Регистрация
13.11.2010
Сообщения
4 127

Фтещт4568

New Member
Регистрация
06.02.2024
Сообщения
9
Ничего непонятно.
Попытался понять, наверное это вам надо
\https://jsfiddle.net/sw1Ln0t4/
Здравствуйте.
Спасибо вам за помощь с скриптом, но я уже решил с ним проблемы, в сущности по такому же принципу, что и вы в своём скрипте переделали.
У меня к вам такая просьба, может посоветуете, как сделать такие действия:
Как можно прописать регулярное выражение в редакторах Notepad++ или Sublime, что бы умножать на определённый коэффициент числовые значения (цифры без запятых, дробей и т.п., просто обычные цифры) находящиеся в большом количестве html страниц например 5500 между тегами <span id="price_here" hidden="hidden">5500</span>. Я читал, что в Notepad++ массово изменять цифровые значения не так то просто, может в Sublime, это можно проще сделать (без особых сложностей) т.к. про работу в Sublime в интернете очень мало информации.
Мне предложили решить данный вопрос с помощью такой процедуры:
Т.к. страницы html, где расположены тэги генерится на php, то задайте константу (или переменную с постоянным значением)
типа $c_price = "5500";
А потом, где надо
<span id="price_here" hidden="hidden"><?=$c_price?></span>
Если честно, с php вообще никогда не сталкивался. Если возможно (и вы эту тему знаете), то опишите подробно процедуру реализации данного способа по массовой замене цифровых значений в тегах (какой программой или онлайн ресурсом можно воспользоваться, как правильно туда вписать регулярное выражение, что бы менять цифры в таком формате тегов <span id="price_here" hidden="hidden">5500</span>).
 

Фтещт4568

New Member
Регистрация
06.02.2024
Сообщения
9
Ничего непонятно.
Попытался понять, наверное это вам надо
\https://jsfiddle.net/sw1Ln0t4/
Здравствуйте.
Спасибо вам за помощь с скриптом, но я уже решил с ним проблемы, в сущности по такому же принципу, что и вы в своём скрипте переделали.
У меня к вам такая просьба, может посоветуете, как сделать такие действия:
Как можно прописать регулярное выражение в редакторах Notepad++ или Sublime, что бы умножать на определённый коэффициент числовые значения (цифры без запятых, дробей и т.п., просто обычные цифры) находящиеся в большом количестве html страниц например 5500 между тегами <span id="price_here" hidden="hidden">5500</span>. Я читал, что в Notepad++ массово изменять цифровые значения не так то просто, может в Sublime, это можно проще сделать (без особых сложностей) т.к. про работу в Sublime в интернете очень мало информации.
Мне предложили решить данный вопрос с помощью такой процедуры:
Т.к. страницы html, где расположены тэги генерится на php, то задайте константу (или переменную с постоянным значением)
типа $c_price = "5500";
А потом, где надо
<span id="price_here" hidden="hidden"><?=$c_price?></span>
Если честно, с php вообще никогда не сталкивался. Если возможно (и вы эту тему знаете), то опишите подробно процедуру реализации данного способа по массовой замене цифровых значений в тегах (какой программой или онлайн ресурсом можно воспользоваться, как правильно туда вписать регулярное выражение, что бы менять цифры в таком формате тегов <span id="price_here" hidden="hidden">5500</span>).
 

BaNru

Пацифизжу
Команда форума
Регистрация
13.11.2010
Сообщения
4 127
По регулярному выражению можно искать что-то, но я не знаю способов чтобы заменять "на коэффициент". То есть по регулярке можно найти например все числа, типа 5000 6000 5500 2000, но заменить на умноженное, например на 2 = 10000 12000 11000 4000 - такого я не знаю, можно заменить их разом, как вам посоветовали на переменную или что-то единое другое.

То есть вам верно посоветовали, если проект на PHP
Также можно на JS подобное сделать.
Но эти варианты не решат вашу задачу с коэффициентами для разных цифр.

Также непонятно как часто и в какой момент менять. Описывайте подробнее задачи, поэтапно, алгоритм. Тогда и сами будете более подробно понимать и другие не будут голову ломать в ваших головоломках.

Есть вариант все числа умножать при загрузке страницы
В примере все числа внутри элемента с классом .price умножаются при загрузке страницы.
 

Фтещт4568

New Member
Регистрация
06.02.2024
Сообщения
9
По регулярному выражению можно искать что-то, но я не знаю способов чтобы заменять "на коэффициент". То есть по регулярке можно найти например все числа, типа 5000 6000 5500 2000, но заменить на умноженное, например на 2 = 10000 12000 11000 4000 - такого я не знаю, можно заменить их разом, как вам посоветовали на переменную или что-то единое другое.

То есть вам верно посоветовали, если проект на PHP
Также можно на JS подобное сделать.
Но эти варианты не решат вашу задачу с коэффициентами для разных цифр.

Также непонятно как часто и в какой момент менять. Описывайте подробнее задачи, поэтапно, алгоритм. Тогда и сами будете более подробно понимать и другие не будут голову ломать в ваших головоломках.

Есть вариант все числа умножать при загрузке страницы
В примере все числа внутри элемента с классом .price умножаются при загрузке страницы.
Здравствуйте.
Очень благодарю вас за правильную идею по решению моего довольно не простого вопроса, по возможности индексировать начальные цифровые значения (которые на каждой странице сайта разные, "в данном примере это 5500") для двух стадийного расчёта скриптом, конечной суммы от количества выбранного товара на странице и в зависимости от кол-ва товара полученной скидки на этот объём.
Способ который вы придумали действительно гениальный, что бы скрипт просто при загрузке каждой html страницы, каждый раз просто умножал изначальную цифру вычислений для скрипта на определённый коэффициент, а потом от полученного значения, дальше производил вычисления "конечной суммы от количества выбранного товара на сайте и в зависимости от кол-ва товара полученной скидки на этот объём" уже просто оперируя не с изначальным числом (в вашей версии скрипта это <span class="price price_here2">5500</span>) а уже 5500 умноженной на определённый коэффициент (допустим 5500*1,4 = это уже 7700) а с цифрой 7700 скрипт продолжал свои вычисления.
Тот вариант скрипта, который вы мне предложили в принципе может делать это, только я уже использую другую подобную версию этого скрипта. Могли бы вы мне помочь подредактировать мою версию так, что бы он делал всё вышеописанное, только работая уже в данной версии.
Только я не знаю как возможно реализовать, что бы скрипт умножал и второе значение 5500, которое находится в моём скрипте <span id="sum_here">5500</span> (для визуального отображения на странице исходной цены). А со значением <span id="price_here" hidden="hidden">5500</span> вроде бы всё проще, т.к. он имеет атрибут hidden="hidden" и не показывается визуально на странице, а служит только исходным числом для вычислений.

HTML:
<div><span id="price_here" hidden="hidden">5500</span><span id="sum_here">5500</span><i id="mlus">руб&nbsp</i><button onclick="qminus('#qty', 1);" id="minus"><i> Кол-во шт.</i></button>&#9664;<input type="number" value="1" onchange="check_qty($(this),1,100);" name="qty" id="qty" value="<? echo $qty ?>"></input>&#9654;<button onclick="qplus('#qty', 100);" id="plus"><i>Скидка на кол-во</i></button>&nbsp;<span id="sum_here1"></span><i id="mlus">руб</i></div>


<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(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_price1(el.val());

}

function show_price(ch) {

    var sum = $('#price_here').html() * ch,

          coeff = +ch > 1 ? 0.02 : 0;

    $('#sum_here').html(sum * (1 - coeff));

    $('#sum_here1').html(sum * coeff);

}

</script>
 
Последнее редактирование:

Фтещт4568

New Member
Регистрация
06.02.2024
Сообщения
9
Спасибо Вам за совет. Не могли бы вы ссылку дать на каком GPT Chat можно эту работу сделать?
 

Фтещт4568

New Member
Регистрация
06.02.2024
Сообщения
9
По регулярному выражению можно искать что-то, но я не знаю способов чтобы заменять "на коэффициент". То есть по регулярке можно найти например все числа, типа 5000 6000 5500 2000, но заменить на умноженное, например на 2 = 10000 12000 11000 4000 - такого я не знаю, можно заменить их разом, как вам посоветовали на переменную или что-то единое другое.

То есть вам верно посоветовали, если проект на PHP
Также можно на JS подобное сделать.
Но эти варианты не решат вашу задачу с коэффициентами для разных цифр.

Также непонятно как часто и в какой момент менять. Описывайте подробнее задачи, поэтапно, алгоритм. Тогда и сами будете более подробно понимать и другие не будут голову ломать в ваших головоломках.

Есть вариант все числа умножать при загрузке страницы
В примере все числа внутри элемента с классом .price умножаются при загрузке страницы.
Здравствуйте.
Попрошу Вас последний раз о помощи. Я по вашему совету доработал свой скрипт, но без использования GPT Chat (внедрив в него один верхний блок из вашего скрипта). Теперь он заработал почти так как нужно, начал индексировать начальную цифру для вычислений 5500 и сразу отображать индексацию на html странице сайта. Осталось только устранить пару багов в скрипте.
1.) Скрипт самое первое умножение по индексации начальной суммы 5500 на коэффициент 1.2 делает верно (начальная индексация 5500*1,2=6600 и при первом нажатии на <button onclick="qplus('#qty', 100);"> он корректно рассчитывает проиндексированную сумму 6600*0,02= 12936 с учётом скидки 264):
$('#price_here').each(function() {
this.textContent *=1.2;
но при дальнейшем вычислении индексации (когда количество товара 3 и более) он начинает умножать дальнейшее значение <span id="price_here">12936</span> в геометрической последовательности, а не на коэффициент 1.2.
2.) Когда нажимаешь (любое количество раз) на правую кнопку увеличения количества "Скидка на кол-во" то скрипт считает как я описал выше, но когда начинаешь нажимать на кнопку уменьшения "Кол-во шт." то скрипт продолжает всё равно умножать (увеличивать) сумму далее, как будто нажимаешь на кнопку увеличения. Можете найти где в скрипте проблема, а то моих знаний для решения этих задач не достаточно. Спасибо.

HTML:
<span id="price_here">5500</span>руб.<button onclick="qminus('#qty', 1);"> Кол-во шт.</button>&#9664;<input type="number" value="1" onchange="check_qty($(this),1,100);" name="qty" id="qty" value="<? echo $qty ?>"></input>&#9654;<button onclick="qplus('#qty', 100);"> Скидка на кол-во</button><span id="sum_here1"></span>руб.


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

<script>

$('#price_here').each(function() {

    this.textContent *=1.2;

});


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_price1(el.val());

}

function show_price(ch) {

    var sum = $('#price_here').html() * ch,

          coeff = +ch > 1 ? 0.02 : 0;

    $('#price_here').html(sum * (1 - coeff));

    $('#sum_here1').html(sum * coeff);

}

</script>
 
Последнее редактирование:

BaNru

Пацифизжу
Команда форума
Регистрация
13.11.2010
Сообщения
4 127
1. Имейте уважение, пользуйтесь кнопкой CODE для размещения кода
2. Также размещайте ваш код на JSfiddle или любом другом алогичном сервисе
Очень много времени уходит не на решение проблемы, а запуске вашего кода.

Что касается вопроса.
Проблема в том. что у вас не фиксируется нигде начальная цифра, поэтому её надо зафиксировать. Для этого можно использовать атрибут data
Код:
data-price-origin='5500'
Его также надо умножить на коэффициент при загрузке страницы
Дальше уже цифру брать не из HTML (textContent),а из этого атрибута и множить её, а в HTML перезаписывать это число
 

BaNru

Пацифизжу
Команда форума
Регистрация
13.11.2010
Сообщения
4 127
Обратил внимание, что вы используете теперь в скрипте PHP
Код:
value="<? echo $qty ?>"
Вы точно также теперь можете использовать начальную цифру, тогда вам не придётся множить при загрузке страницы. Вам это советовали ранее.
Код:
<span id="price_here" data-price-origin='<? echo 5500*1.2; ?>'><? echo 5500*1.2; ?></span>
Выбирайте более удобный вариант.

И у вас там две ошибки в коде, в input
1. У тега input не надо закрывающего тега </input>
2. В коде два раза value
 

Фтещт4568

New Member
Регистрация
06.02.2024
Сообщения
9
Добрый вечер. Еще раз благодарю вас за помощь с скриптом.
Всё работает замечательно, скрипт умножает на нужные коэффициенты все суммы. Только малый нюанс, может подскажите как исправить, когда я вам написал код моей версии скрипта, то там изначальным числом для вычислений было указано 5500 (<span id="price_here" data-price-origin='5500'>5500</span>), и надо же так совпало, что я указал именно его, и что когда ваш скрипт производит вычисления с 5500 (умножая на два коэффициента 1,2 и 0,02) то все оконечные значения вычислений естественно имеют целые числа, а если он работает с другими числами (допустим 3300 или 1700 и любые другие) то оконечные вычисления имеют формат 7761.599999999999 или похожие с цифрами после запятой. Можете подсказать, как сделать, что бы скрипт сам округлял значения вычислений (в любую сторону после запятой) что бы в результате отображались лишь целые числа. Спасибо. Да, и я на вашу страницу подписался.
 

Фтещт4568

New Member
Регистрация
06.02.2024
Сообщения
9
Здравствуйте.
Напишите пожалуйста, вы сможете мне помочь, по ранее написанному Вам вопросу о возможности, что бы Ваш скрипт сам округлял значения вычислений (в любую сторону после запятой) . Я пробовал подставлять в скрипт разные функции Math.ceil() и Math.floor(): Math.ceil() и пробовал DecimalFormat: но ничего у меня так и не вышло. Напишите просто да или нет, сможете подсказать как в скрипт вставить функцию для округления результатов вычислений.
 

BaNru

Пацифизжу
Команда форума
Регистрация
13.11.2010
Сообщения
4 127
Это особенность языка JS (и не только).
Используйте parseInt()
JavaScript:
$('#price_here').html( parseInt(sum * (1 - coeff)) );
$('#sum_here1').html( parseInt(sum * coeff) );
 

Фтещт4568

New Member
Регистрация
06.02.2024
Сообщения
9
Это особенность языка JS (и не только).
Используйте parseInt()
JavaScript:
$('#price_here').html( parseInt(sum * (1 - coeff)) );
$('#sum_here1').html( parseInt(sum * coeff) );
Добрый день. Еще раз выражаю вам свою благодарность. Вы помогли мне и в этот раз. Спасибо. Если сайт в дальнейшем "раскручу", то обязательно Вас отблагодарю.
 
Верх Низ