17.01.2019, 14:18
|
Интересующийся
|
|
Регистрация: 10.11.2018
Сообщений: 22
|
|
Вывести сумму переменных цикла в html
function registerSubmitForm(formSelector, resultSelector, url) {
$(formSelector).submit(function(e) {
e.preventDefault();
var data = $(this).serialize();
$.ajax({
type: "POST",
url: url,
data: data,
success: function(result) {
$(resultSelector).html(result);
}
});
});
}
function minusOrPlus(id, kosz, amount) {
var inc = +$(".result" + id).data("inc");
inc = Math.max(0, inc + amount);
document.getElementById("inc" + id).innerHTML = inc;
var sum = inc * kosz;
document.getElementById("summ" + id).innerHTML = sum;
$(".result" + id).data("inc", inc);
}
while (($cat = mysqli_fetch_assoc($products))){
$id=$cat['id'];
$order = mysqli_query($connection, "SELECT * FROM `order` WHERE `id`=1"); //// products
$zamowienie = mysqli_fetch_assoc($order);
if($zamowienie[$id]>0){
$x++;
$y=$x%2;
if($y==1){
$color='czemny';
}else{$color='szwetly';}
$summ_of+=$zamowienie[$id]*$cat['price'];
echo '<tr class="'.$color.'">
<td class="t_title">'.$cat['name'].'</td>
<td>'.$cat['characteristic'].'</td>
<td>
<form method="POST" onsubmit="" id="minus'.$id.'" style="float:right">
<input class="serle" name="test" value="'.$id.'">
<input onclick="minusOrPlus(\''.$id.'\', '.$cat['price'].', -1)" data-inc="'.$zamowienie[$id].'" class="result'.$id.'" type="submit" value=" – ">
</form>
<script>registerSubmitForm("#minus'.$id.'", "#result'.$id.'", "minus.php");</script>
<span style ="margin-left:3px" id="inc'.$id.'">'.$zamowienie[$id].'</span> шт.
<form method="POST" id="plus'.$id.'" style="float:left">
<input class="serle" name="test" value="'.$id.'">
<input onclick="minusOrPlus(\''.$id.'\', '.$cat['price'].', 1)" data-inc="'.$zamowienie[$id].'" class="result'.$id.'" type="submit" value=" + " id="pulse">
</form>
<script>registerSubmitForm("#plus'.$id.'", "#result'.$id.'", "plus.php");</script>
</td>
<td>'.$cat['price'].' р</td>
<td class="nie_maly"><span id="summ'.$id.'">'.$zamowienie[$id]*$cat['price'].'</span> р</td>
</tr>';
}
}
В каждой строке цикла есть кнопки + и - при нажатии на них выполняются js формулы
Мне нужно чтобы по нажатию на эти кнопки переменная $summ_of(сумма переменных в цикле) выводилась в <span id="ryczalt"> </span>, подскажите как это реализовать
|
|
17.01.2019, 16:48
|
|
Профессор
|
|
Регистрация: 20.12.2009
Сообщений: 1,714
|
|
После цикла (поскольку в нём вычисляется сумма) напечатайте PHP
echo '
<span
id="ryczalt"
data-ryczalt="' . json_encode($summ_of) . '"
>' . $summ_of . '</span>₽
';
JavaScript функцию minusOrPlus, которая идёт перед циклом, замените на новую версию
function minusOrPlus(id, kosz, amount) {
var summ_of = +$("#ryczalt").data("ryczalt");
var inc = +$(".result" + id).data("inc");
var normalizedInc = Math.max(0, inc + amount);
var sum = normalizedInc * kosz;
summ_of = Math.max(0, summ_of + (normalizedInc - inc) * kosz);
$("#inc" + id).html(normalizedInc);
$("#summ" + id).html(sum);
$(".result" + id).data("inc", normalizedInc);
$("#ryczalt").html(summ_of).data("ryczalt", summ_of);
}
|
|
18.01.2019, 09:22
|
Интересующийся
|
|
Регистрация: 10.11.2018
Сообщений: 22
|
|
Сообщение от Malleys
|
После цикла (поскольку в нём вычисляется сумма) напечатайте PHP
|
а можно туда подставлять выражение
$summ_of+=$zamowienie[$id]*$cat['price'];
поскольку в случае такой функции не учитывается количество находящееся в базе
|
|
18.01.2019, 11:36
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от Богдан94
|
а можно туда подставлять выражение
|
Все что угодно можно, ибо вставлено будет не выражение, а его результат. При этом в data-ryczalt="' . json_encode($summ_of) . '" декодирование в json совсем не требуется. JSON потребуется, если это массив, но в этом случае непосредственно вставлять в атрибуты json не всегда получится, если массив содержит строковые значения.
|
|
18.01.2019, 12:03
|
Интересующийся
|
|
Регистрация: 10.11.2018
Сообщений: 22
|
|
Сообщение от laimas
|
Все что угодно можно, ибо вставлено будет не выражение, а его результат. При этом в data-ryczalt="' . json_encode($summ_of) . '" декодирование в json совсем не требуется. JSON потребуется, если это массив, но в этом случае непосредственно вставлять в атрибуты json не всегда получится, если массив содержит строковые значения.
|
function minusOrPlus(id, kosz, amount) {
var summ_of = +$("#ryczalt").data("ryczalt");
var inc = +$(".result" + id).data("inc");
var normalizedInc = Math.max(0, inc + amount);
var sum = normalizedInc * kosz;
summ_of = Math.max(0, summ_of + (normalizedInc - inc) * kosz);
$("#inc" + id).html(normalizedInc);
$("#summ" + id).html(sum);
$(".result" + id).data("inc", normalizedInc);
$("#ryczalt").html(summ_of).data("ryczalt", summ_of);
}
а как изм енить функциючтобы в "#ryczalt" передавалось именно переменная $summ_of+=$zamowienie[$id]*$cat['price']; и есть ли смысл менять эту функцию может можно написать дополнительную не конфликтующую функция
Мне нужно чтобы по нажатию на на кнопку + или - в #ryczalt выводилась переменная $summ_of+=$zamowienie[$id]*$cat['price'];
|
|
18.01.2019, 13:49
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от Богдан94
|
передавалось именно переменная $summ_of+=$zamowienie[$id]*$cat['price'];
|
Не путайте вывод html (РНР) на страницу с клиентскими скриптами. Выше вам показано было как на стороне сервера вставить в атрибуты элемента значение/значения. $summ_of+=$zamowienie[$id]*$cat['price']; - это РНР код, и это может быть и функция, результата которой и будет помещен в атрибут элемента, которым уже клиентский сценарий и будет оперировать. То есть, если РНР выводит:
<tag_name data-xxx="<?=($summ_of+=$zamowienie[$id]*$cat['price'])">...</tag_name>
то переменная $summ_of получит значение равное текущему плюс рассчитанному $zamowienie[$id]*$cat['price'], это же значение будет помещено в в атрибут data-xxx. Это ли вам нужно не знаю, лично я думаю, что вряд ли. Но какое отношение к этому имеет некая клиентская функция? Задайте вопрос корректно - чего вы хотите?
|
|
18.01.2019, 15:13
|
Интересующийся
|
|
Регистрация: 10.11.2018
Сообщений: 22
|
|
Сообщение от laimas
|
Задайте вопрос корректно - чего вы хотите?
|
у меня есть три столбца в одном есть две кнопки '+' и '-'
по нажатию на плюс в число в ревом столбце увеличивается на 1 (грубо говоря) умножается на второй столбец и записывается в третий
по нажатию на - число в первом столбце уменьшается на 1, умножается на второй и также записывается в третий
Мне необходимо чтобы и при нажатию на '+' и по нажатию на '-' внизу под таблицей (черное большое число) отображалась актуальная сумма третьих столбцов. Всего-то-навсего)))
|
|
18.01.2019, 17:13
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
А причем тут РНР код с суммированием и помещения суммы в атрибут? Или вы вопрос корректно задать не можете или не понимаете что нужно.
У вас может быть и не 3 столбца, это никак не изменит сути задачи клиентского кода добавления товара, если это решается исключительно клиентом. Но есть одно НО.
Интернет магазины можно разделить на три категории: шабашники - им главное чтобы заказали, а есть ли у них заказанное на момент заказа, это не важно, далее вопросы буду решаться сугубо "зуб даю, достану"; челночники/базарники - практически что и первое, но с большей ответственностью перед покупателями; полноценный магазин - этот магазин отличается от всех иных обязательным учетом товара (наличие на складе, реализация, порча, списание и т.д.). Исходя из категории магазина рассмотрим два возможных сценария добавления товара.
1) Магазин "неполноценный", возможные форс-мажорные ситуации между продавец-покупатель скрипта никак не касаются, его обязали, он и считает. То есть все делается на клиенте. Но все делать на клиенте, это не значит вывалить ему все в непотребном для обработке виде. Конечно можно достать из колонки 2 цену товара и умножить ее на выбранное количество. Но в данном случае обрабатываются события нажатия кнопок + и -, а значит цена товара в колонке 2 должна выполнять чисто информативную роль и к расчетам не иметь отношения. Выгоднее цену получать из элемента, который вызвал событие, которое и обрабатывается скриптом.
То есть, при запросе страницы сервер формируя html код страницы товаров помещает цену в атрибуты элементов + и -. Я не изучаю ваш код, как обрабатываются эти кнопки не важно, скажу лишь, что совсем не обязательно проверять, что кнопка "минус" или "плюс", можно просто оперировать числами. А это поступить так:
а) html код кнопки "+" - <tag_name data-count="1" data-price="<?=$price?>">+</tag_name>
б) html код кнопки "-" - <tag_name data-count="-1" data-price="-<?=$price?>">-</tag_name>
Как видно из кода, кнопки в атрибутах будут иметь одинаковые значения, но с разными знаками, это количество и вставляемая в атрибуты РНР выводом цена товара, которая также выводится и в колонку 2 для информации и с единицами - "руб."
Обработчик нажатия этих кнопок должен извлекать из data-count значение, суммировать его с количеством набранных, а значение цены из data-price суммировать с суммой набранного. То есть здесь не будет умножения.
Можно поступить иначе. Если количество набранного (колонка 2) сделать полем ввода без возможности ручного ввода в него, то цену за товар можно вставить только в его атрибут. На это поле повесить событие обрабатывающее ввод, в котором из атрибута поля извлекается цена за товар и умножается на количество набранного, а результат пишется в сумму (колонка 3).
2) Полноценный магазин. В этом случае товар либо не может быть добавлен если его нет, и сообщается об этом, возможно с указанием срока когда он будет, либо товар добавляется, но заказ будет обслуживаться по мере поступления товара. Либо, товар есть, но каждое добавление товара, это не JS расчет, а запрос на сервер, где проверяется его наличие на складе, и пользователю уже дается расчет за набранное количество, либо отказ. В этом случае выражение $summ_of+=$zamowienie[$id]*$cat['price']; имеет право на существование как ответ сервера на запрос клиента, но никак как вставка в атрибут элемента.
Последний раз редактировалось laimas, 18.01.2019 в 18:40.
|
|
|
|