Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Числа скаладываются как строки (https://javascript.ru/forum/misc/16347-chisla-skaladyvayutsya-kak-stroki.html)

rasta 04.04.2011 23:24

Числа скаладываются как строки
 
Всем привет!!!
Создал в документе HTML вот такой код:
<div onClick="summ(220);">Товар1</div>
<div onClick="summ(400);">Товар2</div>
<form name="forma1">
Сумма <input type="text" name="res" size="10">
</form>

а в файле script.js следующий код:
function summ(b) {
var s=document.forma1.res.value;
s=s+b;
document.forma1.res.value=s;
}

Хочу сделать так, чтобы при щелчке на надпись "Товар1" в поле выводилось 220, если ещё раз кликну, то 440, а если ещё и по "Товар2" щёлкну то прибавлялось ещё 400, ну и так далее, вообщем как счетчик заказов. Но почему то выводится "Сумма: 220220400" . Как я понял так происходит потому что не выполнено преобразование из строк в числа. Я пробовал заменить s=s+b; на s=parseInt(s)+b; тогда выводит "Сумма: NaN".
Помогите разобраться пожалуйста :)

рони 04.04.2011 23:46

rasta,
При первом клике document.forma1.res.value = пусто !!! parseInt( из нефига ) = NaN
Вариант с parseInt
function summ(b) {
var s=document.forma1.res.value||0;
s=parseInt(s)+b;
document.forma1.res.value=s;
}

Вариант проще через плюс
function summ(b) {
var s=+document.forma1.res.value;
s=s+b;
document.forma1.res.value=s;
}

rasta 05.04.2011 08:46

Спасибо, заработало :)

McLotos 07.04.2011 15:55

А как сделать такое только не через
<div onClick="summ(400);">

а чтобы это были checkbox?

Johny 07.04.2011 16:59

Могу немного подсказать с логикой. Здесь при клике на li добавляется в инпут его id, при повторном убирается. Остается только чуть его изменить. Надеюсь поможет.
$('.list ul li').click(function(){
		if ($(this).hasClass("selected"))
		{
			var id = $(this).attr("id");
			if ($('input#list_arr').val().length > 0)
			{
				var els = $('input#list_arr').val().split(",");
				$('input#list_arr').val("");
				for (i = 0; i < els.length; i++)
				{
					if (id != els[i])
					{
						if ($('input#list_arr').val().length > 0)
							$('input#list_arr').val($('input#list_arr').val() + "," + els[i]);
						else
							$('input#list_arr').val(els[i]);
					}
				}
			}
		}
		else
		{
			var id = $(this).attr("id");
			if ($(this).attr("id") > 0)
			{
				if ($('input#list_arr').val().length > 0)
					$('input#list_arr').val($('input#list_arr').val() + "," + id);
				else
					$('input#list_arr').val(id);
			}
		}
	});


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