Javascript возвращает false, все еще отправляет форму
У меня есть форма с проверкой JS, при наличии ошибки кнопка отправки должна быть "серой", и форма не должна быть отправлена, однако последние две функции, похоже, передают форму, даже если они появляются поле предупреждения!?!?!
Код кнопки:
<input type="submit" name="button" id="button"
onclick='return formvalidation();' value="Next" />
Не работает функция Пример:
function BlankSite() {
var SiteNum= document.getElementsByName("sitesinput")[0].value;
if ((SiteNum == "") || (SiteNum == 0))
{
alert("You have not selected an amount of sites.")
document.forms[0].button.disabled=true;
return false;
}
}
Инициатор функции:
function formvalidation()
{
ZeroPhones();
BlankPC();
BlankSite();
BlankSeats();
phone_change();
}// End of formvalidation
Это очень странно, и я пробовал разные работы вокруг безрезультатно!
Спасибо,
Б.
Ответы
Ответ 1
Они возвращают false (и разбивают, что на самом деле недостижимый код), но результаты никогда не возвращаются в функцию проверки родителя. Ваш валидатор, предполагая, что он связан с действием формы, должен выглядеть так:
function formvalidation(){
{
if (!ZeroPhones())
return false;
if (!BlankPC())
return false;
//
// keep checking for false and return false.
//
// default to return true
return true;
}
Поэтому, когда функции фактически возвращают false, ложный возврат переносится обратно на связанную функцию.
Ответ 2
Вам нужно иметь return false;
в функции, вызванной onclick
, в этом случае formvalidation
.
Если некоторая функция, вызываемая функцией "root", возвращает false, никакого эффекта не происходит, возвращаемое значение теряется.
Ответ 3
BlankPC() вызывается методом formvalidation, поэтому false возвращается в метод formvalidation().
ваш formvalidation() всегда падает с конца, что является тем же самым, что и возвращение true.
Если вы хотите, чтобы он возвращал false, когда одна из ваших отказов завершилась неудачей, это должно быть:
function formvalidation()
{
retval = true;
retval &= ZeroPhones();
retval &= BlankPC();
retval &= BlankSite();
retval &= BlankSeats();
retval &= phone_change();
return retval;
}// End
Это может быть оптимизировано сгусток, но вы можете получить его суть.
Ответ 4
вызывать функцию javascript onSubmit формы вместо вызова на кнопке onClick.
javascript code
function validate()
{
alert('test');
return false;
}
<form action="test" method="post" onsubmit="return validate();">
это отлично работает для меня.
Ответ 5
formvalidation() не возвращает false.
Возможно, вам нужно что-то вроде:
function formvalidation()
{
if(!ZeroPhones() ||
!BlankPC() ||
!BlankSite() ||
!BlankSeats() ||
!phone_change())
return false;
}
Ответ 6
Мое решение этой проблемы было отключить кнопку отправки, пока проверка не прошла успешно. Что-то в этом роде.
function checkPassword() {
//this is my submit button
document.getElementById('nextBtn').setAttribute('disabled','disabled');
password1 = document.getElementsByName("pwd1")[0].value;
password2 = document.getElementsByName("pwd2")[0].value;
if (password1 == '') {
// If password not entered
alert ("Please enter Password");
return false;
} else if (password2 == ''){
// If confirm password not entered
alert ("Please enter confirm password");
return false;
} else if (password1 != password2) {
// If Not same return False.
alert ("\nPassword did not match: Please try again...");
return false;
} else {
document.getElementById('nextBtn').removeAttribute('disabled');
return true;
}
}