Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Расчет произведения двух чисел и вывод на лету (https://javascript.ru/forum/events/16604-raschet-proizvedeniya-dvukh-chisel-i-vyvod-na-letu.html)

Ronicon 14.04.2011 13:16

Расчет произведения двух чисел и вывод на лету
 
Добрый день, господа, есть задача реализовать такую штуку.
Есть таблица с наименованием работ, в которой находятся n строк. Вторая колонка - цена за работу. Третья колонка <input>, куда пользователь вводит необходимое количество. Так вот, необходимо чтобы в четвертой колонке на лету выводилось произведение второй и третьей колонки, а под таблицей - суммарный результат.
Подскажите, пожалуйста, как сие можно реализовать... ну например с использованием события onkeyup

hisbvdis 14.04.2011 13:33

Вас интересует решение именно "вычисления на лету" или полностью вся работа с таблицей?

Ronicon 14.04.2011 13:41

так вся работа с таблицей и сводится к вычислению на лету, чтобы потенциальный пользователь мог сразу видеть результат

Matre 14.04.2011 13:53

<html>
	<body>
		<table id='main'>
			<tr>
				<td>
					Наименование
				</td>
				<td>
					Цена
				</td>
				<td>
					&lt;input>
				</td>
			</tr>
			<tr>
				<td>
					что-то
				</td>
				<td>
					300
				</td>
				<td>
					<input type='text' />
				</td>
			</tr>
			<tr>
				<td>
					что-то
				</td>
				<td>
					300
				</td>
				<td>
					<input type='text' />
				</td>
			</tr>
			<tr>
				<td>
					что-то
				</td>
				<td>
					300
				</td>
				<td>
					<input type='text' />
				</td>
			</tr>
		</table>
		<span id='summ'>0</span>
		<script type='text/javascript'>
			var elems = document.getElementById("main").getElementsByTagName("input"),
			sm = document.getElementById("summ");
			for (var i = 0, l = elems.length; i < l; i++)
				elems[i].onblur = function () {
					var val = this.value, price = this.parentNode.parentNode.cells[1].innerHTML,
					res = +val.replace(/\s/g, "") * +price.replace(/\s/g, "");
					if (res === res) { // проверка от Nan
						this.value = res;
						var s = 0;
						for (var j = 0; j < elems.length; j++)
							s += +elems[j].value;
						sm.innerHTML = s;
					}
				};
		</script>
	</body>
</html>

Ronicon 14.04.2011 14:36

А что делать, если результат придется выводить не в форме, а в другой, четвертой колонке?

рони 14.04.2011 14:42

Matre,
На всякий случай
this.value = (res === res)?res:0

Matre 14.04.2011 15:02

Ronicon, переместить SPAN, куда складывается результат, в четвёртую колонку, предварительно добавив её.

Ronicon 14.04.2011 15:16

Цитата:

Сообщение от Matre (Сообщение 100656)
Ronicon, переместить SPAN, куда складывается результат, в четвёртую колонку, предварительно добавив её.

Я имею в виду, не общий результат сложения, а произведение чисел во 2 и 3 колонке

Matre 14.04.2011 15:31

В ТЗ было указано, что суммарный результат будет выводиться под таблицей.

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

Ronicon 14.04.2011 15:41

Спасибо, Вы все сделали хорошо, и я Вам очень благодарен


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