Пункты, которые нужно заполнять пользователям
Событие 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;
}