【问题标题】:Javascript: How to disable submit button until all fields are validated?Javascript:如何在验证所有字段之前禁用提交按钮?
【发布时间】:2016-08-07 01:37:03
【问题描述】:

我有几个可以正常工作的验证函数,我想用简单的 javascript(no jQuery 等)为整个表单编写一个额外的验证,根据是否其他验证函数返回 true 或 false。我该怎么做?

例如,对于我的主要 HTML,我有:

 <form id="form" method="POST">
      <label class="form">Field 1</label><input type="text" name="input1" onkeyup="validateInput1(); return false">
      <label class="form">Field 2</label><input type="text" name="input2" onkeyup="validateInput2(); return false">
      ...
      <button id="submit" type="submit" value="submit">Submit</button>
 </form>

对于我的脚本,我有:

 function validateInput1(){
 ...
 }

 function validateInput2(){
 ...
 }

现在我想写一个类似这样的函数:

function validateForm(){

    var submitButton = document.getElementById('submit');
    submitButton.disabled = true;

    /*If all other validation functions like validateInput1() returns true then submitButton.disabled = false*/
}

我该怎么做?

【问题讨论】:

  • 如果没有 jQuery,它将有点像 PITA。您必须遍历输入字段,并附加一个更改处理程序,然后让它检查validateForm() 函数以查看所有表单是否有效。之后,如果它们都有效,则将提交按钮设置为启用,否则将其设置为禁用。

标签: javascript function button submit disabled-control


【解决方案1】:

启动按钮禁用。为每个表单输入挂钩onchange 事件,然后让它检查validateForm() 函数以查看所有表单是否有效。之后,如果它们都有效,则将提交按钮设置为启用,否则将其设置为禁用。

var inputs = document.querySelectorAll('#form input');

var validateInput1 = function()
{
  return document.getElementById('input1').value != '';
}

var validateInput2 = function()
{
  return document.getElementById('input2').value != '';
}
    
var validateForm = function() {

  if ( !validateInput1() ) {
    return false;
  }

  if ( !validateInput2() ) {
    return false;
  }

  return true;
}

for ( var i = 0, len = inputs.length; i < len; i++ )
{
  var checkValid = function() {
    document.getElementById('submit').disabled = !validateForm();
    
    //Is the same as:
    /*if ( !validateForm() )
    {
      document.getElementById('submitButton').disabled = true;
    }
    else
    {
      document.getElementById('submitButton').disabled = false;
    }*/
  }
  
  inputs[i].addEventListener('change', checkValid);
  inputs[i].addEventListener('keyup', checkValid);
}
<form id="form" method="POST" onsubmit="alert('Submitted!'); return false">
    <label class="form">Field 1</label><input type="text" name="input1" id="input1">
    <label class="form">Field 2</label><input type="text" name="input2" id="input2">
    <button id="submit" type="submit" value="submit" disabled="disabled">Submit</button>
</form>

【讨论】:

  • 你能在这个问题上做一下吗?我似乎无法让它工作。
  • 我很难过,因为您编码的内容与我最初的问题如此不同。我有 onkeyup="validateOption1(); return false" 但你在代码中取出了它,它弄乱了我的脚本。另外,我的验证函数没有任何返回语句,因为我希望它们是模棱两可的函数。
  • 那么,你必须明确你在寻找什么。
猜你喜欢
  • 1970-01-01
  • 2020-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多