Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.02.2024, 19:51
Ron Ron вне форума
Интересующийся
Отправить личное сообщение для Ron Посмотреть профиль Найти все сообщения от Ron
 
Регистрация: 21.12.2016
Сообщений: 17

Нужна помощь доработать 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>

Последний раз редактировалось Ron, 06.02.2024 в 23:33.
Ответить с цитированием
  #2 (permalink)  
Старый 06.02.2024, 20:09
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,704

У вас функции qminus, qplus, check_qty и проч. по 2 раза определяются.
Так в js нельзя.
Ответить с цитированием
  #3 (permalink)  
Старый 06.02.2024, 21:27
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

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

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

О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.
Ответить с цитированием
  #4 (permalink)  
Старый 06.02.2024, 23:40
Ron Ron вне форума
Интересующийся
Отправить личное сообщение для Ron Посмотреть профиль Найти все сообщения от Ron
 
Регистрация: 21.12.2016
Сообщений: 17

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

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

Последний раз редактировалось Ron, 06.02.2024 в 23:43.
Ответить с цитированием
  #5 (permalink)  
Старый 07.02.2024, 07:40
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,704

Вы читать умеете?
Сообщение от 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>

Последний раз редактировалось voraa, 07.02.2024 в 07:47.
Ответить с цитированием
  #6 (permalink)  
Старый 08.02.2024, 13:42
Ron Ron вне форума
Интересующийся
Отправить личное сообщение для Ron Посмотреть профиль Найти все сообщения от Ron
 
Регистрация: 21.12.2016
Сообщений: 17

Здравствуйте.
Большое Вам спасибо, что смогли доработать скрипт, очень вам признателен. Я его немного изменил под свои нужды, но он всё равно работает не так функционально как требуется. Высылаю вам подработанный мной рабочий вариант этого скрипта, но только я не могу никак устранить пару багов,
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>
Ответить с цитированием
  #7 (permalink)  
Старый 08.02.2024, 14:31
Ron Ron вне форума
Интересующийся
Отправить личное сообщение для Ron Посмотреть профиль Найти все сообщения от Ron
 
Регистрация: 21.12.2016
Сообщений: 17

Здравствуйте.
Большое Вам спасибо, что смогли доработать скрипт, очень вам признателен. Я его немного изменил под свои нужды, но он всё равно работает не так функционально как требуется. Высылаю вам подработанный мной рабочий вариант этого скрипта, но только я не могу никак устранить пару багов,
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>
Ответить с цитированием
  #8 (permalink)  
Старый 08.02.2024, 14:58
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,704

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

Так пробуйте
<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>
Ответить с цитированием
  #9 (permalink)  
Старый 08.02.2024, 16:37
Ron Ron вне форума
Интересующийся
Отправить личное сообщение для Ron Посмотреть профиль Найти все сообщения от Ron
 
Регистрация: 21.12.2016
Сообщений: 17

Уважаемый Профессор, еще раз выражаю Вам огромнейшую благодарность, спасибо за помощь! Теперь скрипт заработал так как нужно. Желаю Вам всего самого наилучшего, удачи во всем и всех благ!
Ответить с цитированием
  #10 (permalink)  
Старый 08.02.2024, 20:52
Ron Ron вне форума
Интересующийся
Отправить личное сообщение для Ron Посмотреть профиль Найти все сообщения от Ron
 
Регистрация: 21.12.2016
Сообщений: 17

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу подогнать старый jQuery скрипт до версии 1.42 artnik jQuery 1 19.01.2011 18:02
Нужна помощь по jquery exor jQuery 7 01.06.2010 12:30
Нужна помощь в ковырянии jquery. За деньги shelz Работа 2 04.02.2010 01:09
jQuery Ajax Rater Plugin и массив POST - Нужна помощь TROODON jQuery 12 30.12.2009 22:44
нужна срочная помощь с jquery Hetfield jQuery 2 19.11.2008 21:45