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;
  }
}