Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.01.2019, 14:18
Интересующийся
Отправить личное сообщение для Богдан94 Посмотреть профиль Найти все сообщения от Богдан94
 
Регистрация: 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>, подскажите как это реализовать
Ответить с цитированием
  #2 (permalink)  
Старый 17.01.2019, 16:48
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

После цикла (поскольку в нём вычисляется сумма) напечатайте PHP
echo '
	<span
		id="ryczalt"
		data-ryczalt="' . json_encode($summ_of) . '"
	>' . $summ_of . '</span>&#8381;
';


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);
}
Ответить с цитированием
  #3 (permalink)  
Старый 18.01.2019, 09:22
Интересующийся
Отправить личное сообщение для Богдан94 Посмотреть профиль Найти все сообщения от Богдан94
 
Регистрация: 10.11.2018
Сообщений: 22

Сообщение от Malleys
После цикла (поскольку в нём вычисляется сумма) напечатайте PHP
а можно туда подставлять выражение
$summ_of+=$zamowienie[$id]*$cat['price'];

поскольку в случае такой функции не учитывается количество находящееся в базе
Ответить с цитированием
  #4 (permalink)  
Старый 18.01.2019, 11:36
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Богдан94
а можно туда подставлять выражение
Все что угодно можно, ибо вставлено будет не выражение, а его результат. При этом в data-ryczalt="' . json_encode($summ_of) . '" декодирование в json совсем не требуется. JSON потребуется, если это массив, но в этом случае непосредственно вставлять в атрибуты json не всегда получится, если массив содержит строковые значения.
Ответить с цитированием
  #5 (permalink)  
Старый 18.01.2019, 12:03
Интересующийся
Отправить личное сообщение для Богдан94 Посмотреть профиль Найти все сообщения от Богдан94
 
Регистрация: 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'];
Ответить с цитированием
  #6 (permalink)  
Старый 18.01.2019, 13:49
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Богдан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. Это ли вам нужно не знаю, лично я думаю, что вряд ли. Но какое отношение к этому имеет некая клиентская функция? Задайте вопрос корректно - чего вы хотите?
Ответить с цитированием
  #7 (permalink)  
Старый 18.01.2019, 15:13
Интересующийся
Отправить личное сообщение для Богдан94 Посмотреть профиль Найти все сообщения от Богдан94
 
Регистрация: 10.11.2018
Сообщений: 22

Сообщение от laimas
Задайте вопрос корректно - чего вы хотите?

у меня есть три столбца в одном есть две кнопки '+' и '-'
по нажатию на плюс в число в ревом столбце увеличивается на 1 (грубо говоря) умножается на второй столбец и записывается в третий
по нажатию на - число в первом столбце уменьшается на 1, умножается на второй и также записывается в третий
Мне необходимо чтобы и при нажатию на '+' и по нажатию на '-' внизу под таблицей (черное большое число) отображалась актуальная сумма третьих столбцов. Всего-то-навсего)))
Ответить с цитированием
  #8 (permalink)  
Старый 18.01.2019, 17:13
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

А причем тут РНР код с суммированием и помещения суммы в атрибут? Или вы вопрос корректно задать не можете или не понимаете что нужно.

У вас может быть и не 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.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите! Как из файла html вывести фото на главную antoxave Элементы интерфейса 14 05.11.2012 22:36
вывести html со стилями блока faraday Общие вопросы Javascript 5 06.07.2012 18:09
Как вывести переменную из javascript в html код? red-nicolas Элементы интерфейса 3 25.02.2012 13:27
Как вывести объект в html MrPostman Элементы интерфейса 16 30.01.2012 19:13