Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Передача значений value (https://javascript.ru/forum/dom-window/50367-peredacha-znachenijj-value.html)

Saillens 23.09.2014 17:53

Передача значений value
 
Здравствуйте уважаемые форумчане. Начал изучать javascript, пытаюсь создать калькулятор стоимости и столкнулся с двумя проблемами на которые не могу найти решения.

Код:

<script>
function summ() {

var result = document.getElementById("result");
var item2 = 0;
var item1 = 0;
var dop = document.getElementById('dop');

var item1 = document.getElementById("item1").value*2000;
if (dop.checked) item2 = +dop.value;
result.innerHTML = item1 + item2;
}
</script>


<div>
item 1
<a onClick="document.getElementById('item1').value--"><button>-</button></a>
<input type="number" min="0" value="0" id="item1" onchange="summ()" />
<a onClick="document.getElementById('item1').value++"><button>+</button></a>

<br><br>
<input type="checkbox" id="dop" value="300" />
<label for="dop">item 2</label>

<br><br>
Общая стоимость
<div id="result">0</div>
</div>

При изменении значения item1 стандартными кнопками в input number стоимость меняется нормально, если через + или - то меняется значение только в поле input, стоимость не считается.
Второй вопрос касается checkbox, как сделать что бы изменение цены отображалось сразу при клике, пробовал через событие onpropertychange, но результата это не дало.

Erolast 23.09.2014 19:43

Цитата:

При изменении значения item1 стандартными кнопками в input number стоимость меняется нормально, если через + или - то меняется значение только в поле input, стоимость не считается.
Правильно, потому что программное изменение значения событие change не вызывает. Вызывай свой summ при клике на кнопку (и да, в ссылку ее оборачивать не нужно):
<button onclick="document.getElementById('item1').value--; summ();">-</button>

Цитата:

Второй вопрос касается checkbox, как сделать что бы изменение цены отображалось сразу при клике, пробовал через событие onpropertychange, но результата это не дало.
onchange

kostyanet 23.09.2014 21:05

Цитата:

Сообщение от Saillens
Начал изучать javascript, пытаюсь создать калькулятор стоимости и столкнулся с двумя проблемами

Обе проблемы перечислены в преамбуле: яваскрипт и калькулятор. Разве можно желать большего.

Засуньте все поля в форму, на событие change формы запрограммируйте на функцию в которой все в одной и считайте. Там же меняйте значение каждого прилетевшего элемента согласно логике приложения. На выходе - рендер соберет все данные и положит их в output. У формы кроме input'ов есть и output'ы, специально для рендера результатов (и промежуточных) результатов расчетов.

А как вы начали делать - то колхоз.

Erolast 24.09.2014 05:32

Цитата:

Засуньте все поля в форму, на событие change формы запрограммируйте на функцию в которой все в одной и считайте.
На программное измнение все равно не среагирует.
Вообще, по-хорошему такой калкулятор должен генериться динамически по заданным параметрам.

Saillens 24.09.2014 09:17

Спасибо, разобрался.

kostyanet 26.09.2014 17:04

Цитата:

Сообщение от Erolast
На программное измнение все равно не среагирует.

Калькулятор в винде ничего сам не делает пока кнопку не нажмешь. Или вы про какие калькуляторы?

Erolast 26.09.2014 18:46

Калькулятор ТС-а, очевидно, должен на изменение параметров реагировать сразу. От того и была первая проблема.

kostyanet 26.09.2014 20:05

Это не проблема. Проблема если бы ТС захотел вычислять выражение, то есть парсить строку, получать токены и считать результат. А тут все просто. Просто надо нормализовать. Вместо

if (dop.checked)
   item2 = +dop.value;



так

item2+=dop.value;


Когда доп щелкнули, метод знающий сколько в допе должно быть когда его щелкнули - записал в его валуе то самое значение. Когда щелкнули еще - записал другое. И так каждый элемент согласно модели. Которую остается только посчитать по нажатию кнопки =. КОторую сами понимаете может нажать любой нажатый элемент после того как нормализовал свои данные. Ну или типа того.


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