Javascript возвращает false, все еще отправляет форму - PullRequest
10 голосов
/ 20 июня 2011

У меня есть форма с проверкой 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

Это очень странно, и я пробовал разные способы обхода безрезультатно!

Спасибо, B.

Ответы [ 6 ]

8 голосов
/ 20 июня 2011

Вам нужно иметь return false; в функции, вызываемой onclick, в этом случае formvalidation.

Если какая-либо функция, вызванная "корневой" функцией, возвращает false, никакого эффекта не имеетвозвращаемое значение потеряно.

5 голосов
/ 20 июня 2011

Они возвращают 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, ложное возвращение переносится обратно в связанную функцию.

3 голосов
/ 07 июня 2013

вызов функции javascript для отправки формы вместо вызова кнопки onClick.

код javascript

function validate()
{
alert('test');
return false;
}

<form action="test" method="post" onsubmit="return validate();">

для меня это нормально.

3 голосов
/ 20 июня 2011

BlankPC () вызывается при проверке формы, поэтому false возвращается в метод formvalidation ().Ваша форма проверки () всегда падает с конца, что совпадает с возвращением истины.Если вы хотите, чтобы он возвращал false, если одна из ваших проверок не пройдена, это должно быть:

function formvalidation()
{
    retval = true;
    retval &= ZeroPhones();
    retval &= BlankPC();
    retval &= BlankSite();
    retval &= BlankSeats();
    retval &= phone_change();

    return retval;
}// End 

Это можно оптимизировать кучей, но вы можете понять суть.

1 голос
/ 20 июня 2011

formvalidation () не возвращает false.

Может быть, вы хотите что-то вроде:

function formvalidation()
{
  if(!ZeroPhones() ||
     !BlankPC() ||
     !BlankSite() ||
     !BlankSeats() ||
     !phone_change())
    return false;
}
0 голосов
/ 05 июля 2019

Мое решение этой проблемы состояло в том, чтобы отключить кнопку отправки, пока проверка не прошла успешно. Что-то в этом роде.

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;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...