【问题标题】:Validation of different inputs after clicking a button单击按钮后验证不同的输入
【发布时间】:2016-12-18 12:25:33
【问题描述】:

我有一个表单,其中包含名称和电子邮件值以及为它们设置的验证。

HTML:

  <fieldset class="form-group">
    <label for="name">Name</label>
    <input type="text" class="form-control" id="name" placeholder="Name">
    <div class="form-control-feedback yellow"> Please, make sure that the name is at least 2 charactes long. </div>
  </fieldset>
  <!--name-->

   <fieldset class="form-group">
      <label for="email">E-mail</label>
      <input type="email" class="form-control" id="email" placeholder="E-mail">
      <div class="form-control-feedback red">Please make sure the e-mail includes an "@". </div>
   </fieldset>
   <!--email-->

<button type="submit" class="btn btn-primary btn-lg mt-3" id="submitPaymentButton"> Process Payment </button> 

JS

var nameWarning = $(".yellow");
var emailWarning = $(".red");
$("#submitPaymentButton").prop("disabled", true);

emailWarning.hide();
nameWarning.hide();

$(document).ready(function() {

  /****************************
  Name validation
  ******************************/
  $("#name").focusout(function() {
    if ($(this).val().length === 0) {
      $(this).parent().removeClass("has-warning");
      nameWarning.hide();
      validateAllInputs();

    } else if ($(this).val().length < 2) {
      $(this).parent().addClass("has-warning");
      nameWarning.show();
    }
  })

  /* If the user focuses in we hide the warnings, this is optional */
  $("#name").focusin(function() {
    $(this).parent().removeClass("has-warning");
    nameWarning.hide();
  });

  /******************************* 
  E-mail fom validation
  ******************************/
  $("#email").focusout(function() {
    if ($(this).val().length === 0) {
      $(this).parent().removeClass("has-danger");
      emailWarning.hide();
      validateAllInputs();
      console.log("hide the warnings");

    } else if ($(this).val().length > 1 && $(this).val().indexOf("@") > -1) {
      $(this).parent().removeClass("has-danger");
      emailWarning.hide();
      console.log("hide the warnings");
    } else {
      $(this).parent().addClass("has-danger");
      emailWarning.show();
      console.log("show the warnings");
    }
  })

  /* If we are inside the form, just hide the warnings as the user is typing.*/
  $("#email").focusin(function() {
    $(this).parent().removeClass("has-danger");
    emailWarning.hide();
  });

这按预期工作,但是当我想添加一个按钮时,问题就来了if" 有效,但永远不会触发"else",我做错了什么?:

  function validateAllInputs() {
    if (!$("#name").parent().hasClass("has-warning") && !$("#email").parent().hasClass("has-danger")) {
      $("#submitPaymentButton").prop("disabled", false);
      console.log("disabled");
    } else {
      $("#submitPaymentButton").prop("disabled", true);
      console.log("enabled");
    }
  }

【问题讨论】:

    标签: javascript jquery forms validation


    【解决方案1】:

    试试这个....

    1:我已经使用了焦点和模糊事件

    2:在您的示例中,您在以下条件下缺少 validateAllInputs() 调用

     else if ($(this).val().length > 1 && $(this).val().indexOf("@") > -1) {
          $(this).parent().removeClass("has-danger");
          emailWarning.hide();
          console.log("hide the warnings");
    

    var nameWarning = $(".yellow");
    var emailWarning = $(".red");
    $("#submitPaymentButton").prop("disabled", true);
    
    emailWarning.hide();
    nameWarning.hide();
    
    $(document).ready(function() {
    
      /****************************
      Name validation
      ******************************/
      $("#name").on("blur",function() {
        if ($(this).val().length === 0) {
          $(this).parent().removeClass("has-warning");
          nameWarning.hide();
          validateAllInputs();
    
        } 
        else if ($(this).val().length < 2) {
          $(this).parent().addClass("has-warning");
          nameWarning.show();
        }
      })
    
      /* If the user focuses in we hide the warnings, this is optional */
      $("#name").on("focus",function() {
        $(this).parent().removeClass("has-warning");
        nameWarning.hide();
      });
    
      /******************************* 
      E-mail fom validation
      ******************************/
      $("#email").on("blur", function() {
        if ($(this).val().length === 0) {
          $(this).parent().removeClass("has-danger");
          emailWarning.hide();
          validateAllInputs();
          console.log("hide the warnings");
    
        } else if ($(this).val().length > 1 && $(this).val().indexOf("@") > -1) {
          $(this).parent().removeClass("has-danger");
          emailWarning.hide();
          validateAllInputs();
          console.log("hide the warnings");
        } else {
          $(this).parent().addClass("has-danger");
          emailWarning.show();
          console.log("show the warnings");
        }
      })
    
      /* If we are inside the form, just hide the warnings as the user is typing.*/
      $("#email").on("focus",function() {
        $(this).parent().removeClass("has-danger");
        emailWarning.hide();
      });
     
      });
    
    function validateAllInputs() {  
        if (!$("#name").parent().hasClass("has-warning") && !$("#email").parent().hasClass("has-danger")) {
         $("#submitPaymentButton").prop("disabled", false);
          console.log("disabled");
        } else {
          $("#submitPaymentButton").prop("disabled", true);
          console.log("enabled")
        }
      }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <fieldset class="form-group">
        <label for="name">Name</label>
        <input type="text" class="form-control" id="name" placeholder="Name">
        <div class="form-control-feedback yellow"> Please, make sure that the name is at least 2 charactes long. </div>
      </fieldset>
      <!--name-->
    
       <fieldset class="form-group">
          <label for="email">E-mail</label>
          <input type="email" class="form-control" id="email" placeholder="E-mail">
          <div class="form-control-feedback red">Please make sure the e-mail includes an "@". </div>
       </fieldset>
       <!--email-->
    
    <button type="submit" class="btn btn-primary btn-lg mt-3" id="submitPaymentButton"> Process Payment </button>

    【讨论】:

    • 这确实有效,感谢您提供的一个很好的解决方案,它并没有对我的代码有太大的改变。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多