Функции Javascript
Здравствуйте, учусь тут js и задался вопросом "в скрипте может использоваться только одна функция (function) или несколько?". Правильно ли я понимаю, что в скрипте может использоваться только одна функция, для другой нужно подключать еще один скрипт?
Вот для примера. У меня есть функция для того, чтобы выдавалось сообщение об ошибке, если не заполнено хотя бы одно из трех полей («Сумма», «Срок» и «Ставка») и для проверки тех же самых полей для предотвращения ввода нечисловых данных. Есть еще одна функция для подсчета общей суммы вклада (Общая_Сумма =Сумма*(Ставка/100/12)*Срок.), но она почему-то не работает. Подскажите, пожалуйста, как ее исправить 1 функция (работает):
function checkform(){
var z = document.forms["bank"]["summ"].value;
var a = document.forms["bank"]["srok"].value;
var b = document.forms["bank"]["stavka"].value;
valid = true;
if (document.bank.summ.value == "" || /\D/.test(z))
{alert("Вы не заполнили поле Сумма или ввели буквы вместо цифр")
valid=false;
}
else
if (document.bank.srok.value == "" || /\D/.test(a))
{alert("Вы не заполнили поле Срок или ввели буквы вместо цифр")
valid=false;
}
else if (document.bank.stavka.value == "" || /\D/.test(b))
{alert("Вы не заполнили поле Ставка или ввели буквы вместо цифр")
valid=false;
}
return valid;
}
2 функция (не работает):
document.bank.onsubmit = function() {
var result = (this.summ.value * (this.stavka.value/100/12) * this.srok.value);
this.result.value = result.toFixed(2);
return false;
}
И форма: <form action="" method="post" name="bank" align="center" style="color:#ED1302;" > <label for="Cумма">Сумма(руб.): </label> <input type="text" name="summ" id="summ"/><br /><br /> <label for="Срок">Срок(мес.): </label> <input type="text" name="srok" id="srok"/><br /><br /> <label for="Cтавка">Ставка(%):</label> <input type="text" name="stavka" id="stavka"/><br /><br /> <label for="Общая сумма">Общая сумма: </label> <input type="text" name="result" readonly> <br /><br /> <input type="submit" name="submit" id="rezultat" value="Вычислить!" /> </form> |
В общем, из одного скрипта, перекинул в первый, скажем так, объединил.
Выводит результат, но теперь другая проблема. Как задержать результат? Он показывается на пол секунды и пропадает.
function checkform(){
var a=document.bank.summ.value;
var b=document.bank.srok.value;
var c=document.bank.stavka.value;
var t=a*(c/100/12)*b;
document.bank.result.value=t;
var z = document.forms["bank"]["summ"].value;
var a = document.forms["bank"]["srok"].value;
var b = document.forms["bank"]["stavka"].value;
valid = true;
if (document.bank.summ.value == "" || /\D/.test(z))
{alert("Вы не заполнили поле Сумма или ввели буквы вместо цифр")
valid=false;
}
else
if (document.bank.srok.value == "" || /\D/.test(a))
{alert("Вы не заполнили поле Срок или ввели буквы вместо цифр")
valid=false;
}
else if (document.bank.stavka.value == "" || /\D/.test(b))
{alert("Вы не заполнили поле Ставка или ввели буквы вместо цифр")
valid=false;
}
document.bank.result.value=t;
return valid;
}
|
Цитата:
richlime, читать https://learn.javascript.ru/introduction-browser-events переходить на addEventListener при назначении обработчиков с on... |
Цитата:
|
и что делать?
|
richlime,
<!doctype html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
[name="bank"] {
color:#ED1302;
text-align: center;
}
</style>
<script>
document.addEventListener("DOMContentLoaded", function() {
function checkform(event) {
event.preventDefault(); //отмена отправки данных из формы
var a = document.bank.summ.value;
var b = document.bank.srok.value;
var c = document.bank.stavka.value;
var t = a * (c / 100 / 12) * b;
document.bank.result.value = t;
var z = document.forms["bank"]["summ"].value;
var a = document.forms["bank"]["srok"].value;
var b = document.forms["bank"]["stavka"].value;
valid = true;
if (document.bank.summ.value == "" || /\D/.test(z)) {
alert("Вы не заполнили поле Сумма или ввели буквы вместо цифр")
valid = false;
} else
if (document.bank.srok.value == "" || /\D/.test(a)) {
alert("Вы не заполнили поле Срок или ввели буквы вместо цифр")
valid = false;
} else if (document.bank.stavka.value == "" || /\D/.test(b)) {
alert("Вы не заполнили поле Ставка или ввели буквы вместо цифр")
valid = false;
}
document.bank.result.value = t;
return valid;
}
document.bank.addEventListener("submit", checkform)
});
</script>
</head>
<body>
<form action="" method="post" name="bank">
<label for="Cумма">Сумма(руб.): </label>
<input type="text" name="summ" id="summ"/><br /><br />
<label for="Срок">Срок(мес.): </label>
<input type="text" name="srok" id="srok"/><br /><br />
<label for="Cтавка">Ставка(%):</label>
<input type="text" name="stavka" id="stavka"/><br /><br />
<label for="Общая сумма">Общая сумма: </label>
<input type="text" name="result" readonly>
<br /><br />
<input type="submit" name="submit" id="rezultat" value="Вычислить!" />
</form>
</body>
</html>
|
Цитата:
Не предполагается отправление формы? Тогда и кнопка submit не нужна, можно просто кнопкой вызывать расчет, причем проверку полей выполнять тут же, то есть все одной функцией. <form id="bank"> .... <input type="button" id="rezultat" value="Вычислить!" />
document.getElementById('rezultat').addEventListener('click', calculate);
function calculate() {
let fld = document.getElementById('bank').elements, error = [];
[...fld].slice(0, 3).forEach((e) => {
if(!e.value.trim() || /\D/.test(e.value)) error.push("Вы не заполнили поле "+e.previousElementSibling.getAttribute('for')+" или ввели буквы вместо цифр")
});
if(error.length) {
alert(error.join('\n'));
return;
}
fld.result.value = (fld.summ.value * (fld.stavka.value/100/12) * fld.srok.value).toFixed(2)
}
|
Спасибо) Уже разобрался
<form action="javascript:checkform()(this)" method="post" name="bank" align="center" onsubmit="return checkform(this)" style="color:#ED1302;" >Вроде все работает) |
А еще, подскажите, пожалуйста, как с помощью атрибута disabled сделать так, чтобы кнопка "Вычислить" была неактивной, до того момента, пока все поля не будут заполнены?
|
Выбрасывайте action="javascript:checkform()(this)" (это вообще ошибка), method="post", onsubmit="return checkform(this)", это не лучший подход, align="center", style="color:#ED1302;", это лучше стилями.
|
| Часовой пояс GMT +3, время: 16:31. |