Пункты, которые нужно заполнять пользователям
Событие oninput происходит когда элемент меняет своё значение в момент фокуса.
<form onsubmit="return false;" oninput=" document.getElementById('rezultat').innerHTML = parseFloat(document.getElementById('a').value) * parseFloat(document.getElementById('b').value) " > длина <input id="a" type="number"> ширина <input id="b" type="number"> площадь прямоугольника <output id="rezultat"></output> </form>или так
<script type="text/javascript"> function changeText0(){ var rezultat = 1; rezultat *= parseFloat(document.getElementById('a').value); rezultat *= parseFloat(document.getElementById('b').value); document.getElementById('rezultat').innerHTML = rezultat; } </script> <form onsubmit="return false;" oninput="changeText0()"> длина <input id="a" type="number"> ширина <input id="b" type="number"> площадь прямоугольника <output id="rezultat"></output> </form>Другой пример.
Добавим выпадающий список
Событие onchange происходит когда элемент меняет своё значение на момент потери фокуса. Видно в IE. Поэтому если присутствуют два разных типов input, к которым лучше применить разное событие, выносим скрипт за форму.
<script type="text/javascript"> function changeText(){ var rezultat1 = 0; var odin = document.getElementById('odin').value; var spisok = document.getElementById('spisok').options[document.getElementById('spisok').selectedIndex].value; rezultat1 = parseFloat(odin); rezultat1 *= parseFloat(spisok); document.getElementById('rezultat1').innerHTML = rezultat1; } </script> <form onsubmit="return false;"> <input id="odin" type="number" value="1" oninput="changeText()"> <select id="spisok" onchange="changeText()"> <option value="1">мм</option> <option value="10">см</option> <option value="1000">м</option> <option value="1000000">км</option> </select> = <output id="rezultat1">1</output> мм </form>
Добавим чекбокс type="checkbox"
Событие onclick происходит при щелчке левой клавишей мышки на элементе. На основе этого скрипта.
<style type="text/css"> #rezultat2:before { content: "площадь квадрата "; } #krug:checked ~ #rezultat2:before { content: "площадь круга "; } </style> <script type="text/javascript"> function kalkulyator(){ var rezultat2 = 1; rezultat2 *= parseFloat(document.getElementById('odin1').value) * parseFloat(document.getElementById('odin1').value); if (document.getElementById('krug').checked) rezultat2 *= parseFloat(document.getElementById('krug').value); document.getElementById('rezultat2').innerHTML = rezultat2; } </script> <form onsubmit="return false;"> <input id="odin1" type="number" value="1" oninput="kalkulyator()"> <label for="krug">для расчёта площади круга</label> <input type="checkbox" id="krug" value="3.141592653589793" onclick="kalkulyator()"/> <output id="rezultat2">1</output> площадь квадрата = квадрату его стороны S = a<sup>2</sup> площадь круга = квадрату его радиуса умноженного на число "пи" S = ?R<sup>2</sup> </form>
С помощью псевдокласса :checked и псевдоэлемента :before меняем текст перед результатом.
Добавим флажок type="radio"
То же самое, что и выше.
<script type="text/javascript"> function kalkulyator4(){ if (document.getElementById('vis').checked) var flag = document.getElementById('vis').value; if (document.getElementById('vis1').checked) var flag = document.getElementById('vis1').value; if (parseFloat(document.getElementById('god').value)/parseFloat(flag) == parseInt(document.getElementById('god').value/parseFloat(flag)) ) { document.getElementById('rezultat4').innerHTML = 366; } else { document.getElementById('rezultat4').innerHTML = 365; }; } </script> <form onsubmit="return false;"> год <input id="god" type="number" value="2012" oninput="kalkulyator4()"> <label>каждый год, например, 2012 <input type="radio" id="vis" value="4" checked="checked" name="raz10" onclick="kalkulyator4()"/></label> <label>исключение, каждый сотый год, например, 2100 <input type="radio" id="vis1" value="400" onclick="kalkulyator4()" name="raz10"/></label> число дней в году: <output id="rezultat4">366</output> </form>
Проверка на целое число javascript
Столкнулась в этом примере, поскольку года, которые делятся на 4 без остатка, являются високосными (искл. каждый сотый год, но не каждый четырёхсотый). Условие такое:
if (parseFloat(document.getElementById('god').value)/4 == parseInt(document.getElementById('god').value/4) ) { ... } else { ... };parseFloat возвращает дробное число,
parseInt возвращает целое число.
Смена select в зависимости от установленного флажка
<style type="text/css"> #b15:checked ~ #spisok15 { display: none; } #a15:checked ~ #spisok14 { display: none; } </style> <script type="text/javascript"> function kak(){ if (document.getElementById('a15').checked) var flag15 = document.getElementById('spisok15').options[document.getElementById('spisok15').selectedIndex].value; if (document.getElementById('b15').checked) var flag15 = document.getElementById('spisok14').options[document.getElementById('spisok14').selectedIndex].value; document.getElementById('rezultat15').innerHTML = parseFloat(flag15); } </script> <form onsubmit="return false;" onchange="kak()"> материки <input type="radio" id="a15" checked="checked" name="raz15"/> часть света <input type="radio" id="b15" name="raz15"/> <select id="spisok15"> <option value="54">Евразия</option> <option value="30">Африка</option> <option value="24">Северная Америка</option> <option value="17">Южная Америка</option> <option value="9">Австралия</option> <option value="14">Антарктида</option> </select><select id="spisok14"> <option value="11">Европа</option> <option value="43">Азия</option> <option value="30">Африка</option> <option value="42">Америка</option> <option value="9">Австралия и Океания</option> <option value="14">Антарктида</option> </select> Площадь <output id="rezultat15">54</output> млн. км<sup>2</sup> </form>Ещё примеры.
35 комментариев:
Вопрос
<input type="number" min="0">
но пока не всеми браузерами поддерживается :(
<input pattern="\d+"/>
ни букв, ни минусов...
http://berezaksi.by/index.php/raschjot-blokov
<input value="я показан сразу">
Объясню просто. Форма, в ней циклом может до 8 таблиц рисоваться. Допустим, что она одна всего (табличка). Я так понимаю, пока php обрабатывает скрипт, Ява уже смотрит, что там, а там ещё нет значений и пока ничего не выдает,так? :-) А когда начинаю щёлкать - уже срабатывает. Нашел совет, типа поставить скрипт в конец, после формы. Но ничего, к сожалению, не изменилось - пусто при загрузке страницы.
Я бы передавала в JS значения, а с помощью JS делала подсчёты.
http://jsfiddle.net/NMitra/kowhr3s9/
http://jsfiddle.net/NMitra/kowhr3s9/1/
То есть в первом случае функция исполняется после какого-то действия. Во-втором, после загрузки страницы или выполнения какого-то действия (нажатия, фокуса, изменения значения и т.п.)
function insertTotal() {
if (edizm.value=="1"){
var per=id.value /dltr;
var perr= math.ceil(parseFloat(per));
var count = perr*dltr* vespm;
total.innerHTML = 'Эквивалентно: ' + count +'тн';
} else {
var count = id.value / vespm;
total.innerHTML = 'Эквивалентно: ' + count +'пм' ;}
}
}
Но она не работает, результат не выводится. Может подскажите, что не так?
Сейчас уже не так хорошо получается - знания мешают :( Когда сама новичок и пишешь для новичков, как ни странно, проще. Потом невольно упускаешь важные детали.
Очень полезные примеры.
А не подскажете, как вот еще сохранить полученный результат?
document.getElementById('rezultat1').innerHTML = rezultat1;
function changeText(){
var bill1 = 0;
var bill = 0;
var fullbill = 0;
var fullbill1 = document.getElementById('fullbill1').value;
var firstAccount = document.getElementById('firstAccount').options[document.getElementById('firstAccount').selectedIndex].value;
var firstPc = document.getElementById('firstAccount').options[document.getElementById('firstAccount').selectedIndex].id;
bill1 = parseFloat(fullbill1);
bill1 = bill1-bill1*parseFloat(firstPc)/100;
bill = bill1;
fullbill = parseFloat(fullbill1);
document.getElementById('bill1').innerHTML = bill1;
document.getElementById('bill').innerHTML = bill;
document.getElementById('fullbill').innerHTML = fullbill;
}
...............
а вот процедура выбора:
{$accn1} -{$accnpc1}%
{$accn2} -{$accnpc2}%
{$accn3} -{$accnpc3}%
{$accn4} -{$accnpc4}%
{$accn5} -{$accnpc5}%
= {$bill1} руб
и в идеальном варианте, мне бы куда-нибудь приткнуть hidden поле ввода для {$bill1}, не могу придумать, как сделать, чтобы оно заполнялось полученным значением.
А дальше я его уже сохраню при помоpщи php
вот она: http://jsfiddle.net/fsLn9w7m/
document.getElementById('bill1').style.visibility = 'hidden';
http://shpargalkablog.ru/2015/05/style-css-javascript.html
В форме происходит 3 вещи:
1 - вводится сумма fullbill1,
2 - выбирается дисконт: $account1 ,
3 - считается сумма с дисконтом bill1.
Ну там помимо этого считаются итоги, но это не критично.
При этом замечательно сохраняются только 2 параметра:
fullbill1, - как введенное пользователем число <input class...
account1, - как результат выбора <select....
а как сохранить при записи документа bill1 я не понимаю ((
document.getElementById('dva').onclick = raz;
raz();
function raz() {
alert(1+2);
}
Есть ещё вариант http://shpargalkablog.ru/2013/06/localStorage.html но я бы в данном случае использовала первый (если правильно поняла проблему).
var hidden_ac = $('.form-autocount input[name="bill1"]');
$('.form-autocount input[name="bill1"]').val(bill1);
http://jsfiddle.net/fsLn9w7m/
Нужно сделать простой калькулятор, но вот знаний не хватает.
Налоговый режим
Упрощенный < input type="radio" id="inpX" checked="checked" value="5000"/>
Общеустановленный < input type="radio" id="inpY" value="10000"/>
Кассовый аппарат
Да < input type="radio" id="inpX" checked="checked" value="10000"/>
Нет < input type="radio" id="inpY" value="0"/>
< button id="btnRun">Рассчитать
< span id="spnResult">
< script type="text/javascript">
function calculate(){
if document.getElementById('inpX').checked)
var z = input[document.getElementById('inpX').selectedIndex].value;
if document.getElementById('inpY').checked)
var z = input[document.getElementById('inpY').selectedIndex].value;
if document.getElementById('inpA').checked)
var a = input[document.getElementById('inpA').selectedIndex].value;
if document.getElementById('inpB').checked)
var a = input[document.getElementById('inpB').selectedIndex].value;
var spnResult = document.getElementById('spnResult');
var r = z+a;
spnResult.innerHTML = r;
}
window.onload = function(){
var btnRun = document.getElementById('btnRun');
btnRun.onclick = calculate;
}