【问题标题】:Javascript form validation needs fixJavascript 表单验证需要修复
【发布时间】:2013-11-09 17:16:14
【问题描述】:

我正在尝试进行基本的表单验证,但它不起作用。我需要以这样的方式进行,即在通过验证后,然后才提交表单。我不知道该怎么做。我的代码如下。

[重要请求] ** 我实际上对此很陌生,所以如果可能的话,我想获得一些关于 DOM 的具体信息/解释以及如何操作它和设置它的样式(W3School 没有帮助)**

<form id="reg" method="POST" action="user.php" onsubmit="return validate()">

    <label for="first">First Name: </label>
    <input id="first" name="first" type="text" value="">

    <label for="last">Last Name: </label>
    <input id="last" name="last" type="text" value="">


    <button type="submit">Register</button>
</form> 



function validate(){

    if(document.getElementById('first').value == ""){
        alert('First Name Blank!');
        return false;
    }else{
        return true;
    }

    if(document.getElementById('last').value == ""){
        alert('Last Name Blank!');
        return false;
    }else{
        return true;
    }
}

谢谢

【问题讨论】:

  • 你说的是提交的时候怎么刷新的?
  • 或者你的意思是它无论如何都会提交?
  • 无论如何它都会提交。我希望它先验证,然后在验证良好时提交。

标签: javascript html validation dom


【解决方案1】:

试试这个:

function validate() {
  var validForm = true;
  var msg = '';

  if (document.getElementById('first').value == "") {
    msg += 'First Name Blank! ';
    validForm = false;
  }
  if (document.getElementById('last').value == "") {
    msg += 'Last Name Blank! ';
    validForm = false;
  }
  if (!validForm) {
    alert(msg);
  }

  return validForm;
}

Plunker example

【讨论】:

  • 这是完美的工作。但是我有一个问题,if(!validForm) 和 return validForm 的目的是什么?
  • 1. if (!validForm) 仅用于在表单无效时显示警报 - 即使两个输入为空,它也只显示一个警报。 2.return validForm;是为了避免在表单无效的情况下将表单发送到服务器。在 html 中 onsubmit="return false" - 表示不发送表单,onsubmit="return true" 表示发送表单。您在 html onsubmit="return validate()" 中使用,因此您的函数 validate() 应该返回 true 或 false。
  • 谢谢,我现在明白了:)
【解决方案2】:

您的验证函数仅验证名字。无论是否有效,函数都会在检查姓氏之前返回。

function validate(){

    if(document.getElementById('first').value == ""){
        alert('First Name Blank!');
        return false;        // WILL RETURN EITHER HERE ...
    }else{
        return true;         // ... OR HERE
    }

return 语句将在它出现的地方退出函数,之后的其他代码根本不会执行。

不要那样做,保留一个标志来确定字段是否都OK:

function validate(){
    var isValid = true; // Assume it is valid

    if(document.getElementById('first').value = ""){
        alert('First Name Blank!');
        isValid = false;
    }

    if(document.getElementById('last').value == ""){
        alert('Last Name Blank!');
        isValid = false;
    }

    return isValid;
}

【讨论】:

  • 它只需要验证一个,如果它是假的,那么他们希望它告诉他们并让他们修复它。
  • @Lugia101101 第一个if 语句将返回truefalse,因此第二个if 语句将不会被评估永远
  • @Pointy 所以它所做的就是检查该值是否为空并且使isValid = false?如果我错了,请纠正我,如果我包含 return true,即使所有值都是 null,最后一个 return true 最终会使之前的 null 框的所有 return false 无效?请清除这个:)
  • @SabTheCoder return 语句立即退出函数。它不会“构建”返回值,而是说“立即返回!”
【解决方案3】:

这是检查验证的代码如果数据不正确则停止提交。

<form id="reg" method="POST" action="user.php">

    <label for="first">First Name: </label>
    <input id="first" name="first" type="text" value="">

    <label for="last">Last Name: </label>
    <input id="last" name="last" type="text" value="">


    <button type="button" id="submit">Register</button>
</form> 


document.getElementById('submit').onclick = function(){
    if(validate()){
         document.getElementById('reg').submit();
    }
}


function validate(){

    if(document.getElementById('first').value == ""){
        alert('First Name Blank!');
        return false;
    }else if(document.getElementById('last').value == ""){
        alert('Last Name Blank!');
        return false;
    }else{
        return true;
    }
}

我在这里所做的只是将提交按钮设置为常规按钮并通过 JS 处理提交,当单击 submit 类型的输入时,页面无论如何都会提交表单。要绕过这一点,您可以将其设为常规按钮,并在满足某些条件时使其手动提交表单。

【讨论】:

  • 并且已经修复了。
【解决方案4】:

您的 javascript 代码可以是:

document.getElementById('submit').onclick = function () {
    if (validate()) {
        document.getElementById('reg').submit();
    }
}

function validate() {
    if (document.getElementById('first').value == "") {
        alert('First Name Blank!');
        return false;
    } else if (document.getElementById('last').value == "") {
        alert('Last Name Blank!');
        return false;
    } else {
        return true;
    }
}

【讨论】:

  • 为什么使用 if(validate()){document.getElementById('reg').submit();}}
  • 因为如果 validate() 为真,则意味着所有字段都已填写,因此单击按钮即可继续。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-01
相关资源
最近更新 更多