Я пытаюсь сделать простой калькулятор с 4 вариантами (/* + -), но почему-то мои события onclick и onkeyup отказываются работать. Я пробовал различные методы, чтобы мои события работали (добавление preventDefault, return false), после чего я отказался, потому что я не смог его исправить. Если вы не возражаете, пожалуйста, помогите мне!
HTML:
<body>
<div id="wrap">
<div id="header">
<h1>Simple Calculator</h1>
<form name="form" id="form">
<input type="number" name="addta1" onkeyup="calc();"/>
<span id="plusadd">+</span>
<input type="number" name="addta2" onkeyup="calc();"/>
=
<span id="addresult"></span>
<br/>
<input type="number" name="subta1" onkeyup="calc();"/>
-
<input type="number" name="subta2" onkeyup="calc();"/>
=
<span id="subresult"></span>
<br/>
<input type="number" name="multa1" onkeyup="calc();"/>
*
<input type="number" name="multa2" onkeyup="calc();"/>
=
<span id="mulresult"></span>
<br/>
<input type="number" name="divta1" onkeyup="calc();"/>
/
<input type="number" name="divta2" onkeyup="calc();"/>
=
<span id="divresult"></span>
<br/>
<div class="buttonwrap">
<input onclick="calc();" type="submit" value="Submit" name="submit" method="post"/>
<input type="reset" value="Reset" name="reset"/>
</div>
</form>
</div>
</div>
</body>
Javascript:
function calc() {
var addOne = parseInt(document.form.addta1.value);
var addTwo = parseInt(document.form.addta2.value);
var subOne = parseInt(document.form.subta1.value);
var subTwo = parseInt(document.form.subta2.value);
var mulOne = parseInt(document.form.multa1.value);
var mulTwo = parseInt(document.form.multa2.value);
var divOne = parseInt(document.form.divta1.value);
var divTwo = parseInt(document.form.divta2.value);
var addResult = addOne + addTwo
var subResult = subOne - subTwo
var mulResult = mulOne * mulTwo
var divResult = divOne / divTwo
document.getElementById('addresult').innerHTML = addResult;
document.getElementById('subresult').innerHTML = subResult;
document.getElementById('mulresult').innerHTML = mulResult;
document.getElementById('divresult').innerHTML = divResult;
}
Вот скрипка с CSS на нем: http://jsfiddle.net/rPCYf/ Я буду публиковать и утверждать, как обычно, каждый полезный пост! Заранее спасибо!
Когда вы меняете параметр обертки в jsfiddle с "onLoad" на "no wrap-in", он будет работать.
См. Здесь: http://jsfiddle.net/rPCYf/1/
// no code changed
Этот ответ объясняет это и дает вам еще пару вариантов.
Кнопка отправки должна вернуть значение false, чтобы предотвратить обновление страницы (или использовать какой-либо другой метод).
И, еще одно предложение, используйте "onchange" вместо "onkeyup" для просмотра изменений полей ввода (в идеале, не используя атрибуты html, но привязки к группе)... См. Здесь (я изменил только первые два поля): http://jsfiddle.net/rPCYf/2/
РЕЗЮМЕ
Вы выбрали "onload" в качестве обертки для JS в JSFiddle. Это обертывает все JS в функции, которая вызывается при срабатывании события загрузки.
Последствием (что обычно является желательным) является то, что ваши функции больше не являются глобальными.
Поскольку они не являются глобальными, они не соответствуют вашим внутренним атрибутам событий.
Свяжите обработчики событий с JavaScript вместо атрибутов HTML.
addEventListener('keypress', calc);