【问题标题】:jquery validation & clearing error messagesjquery 验证和清除错误信息
【发布时间】:2012-09-01 19:46:33
【问题描述】:

我有一个需要输入 3 个字段的表单:名字、姓氏和电子邮件地址。

元素都与我为电子邮件地址获取的元素相似:

<dl>
  <dt>
    <label for="Email_Address">Email Address</label>
  </dt>
  <dd style="float:right">
     <input type="text" id="Email_Address" class="required  email" name="Email_Address" />
     <br>
     <span class="form_error" id="email_error">
       <span id="email_msg"></span>
     </span>
   </dd>
</dl>

它下面的跨度类“form_error”是我显示任何验证错误的地方。验证代码一切正常,检查有效的电子邮件地址等。然后我想我会抛出一个 AJAX 验证,在那里我可以检查该电子邮件地址是否已经在文件中,如果是,也显示一条消息.这一切都很好。问题是,如果有人输入了已存档的电子邮件地址,他们会收到“电子邮件已存档”的消息。然后他们去更改表单中的电子邮件地址,我收到验证错误,但我似乎无法弄清楚如何清除“已存档”消息。我尝试过使用empty()replaceWith() 和其他一些,但它似乎不起作用。

这里是验证代码,带有 AJAX 调用。我确信这很简单,但我还不是这方面的专家。

$(document).ready(function(){
  $("#LegalVita_Sign_Up").validate({
    submitHandler: function(form) {
      var isDup = false;

      $.ajax({
        url: 'dup_email.php',
        data: { email: $('#Email_Address').val() },
        async: false, 
        success: function(msg) { 
          isDup = msg === "1" ? true : false 
        },
      });         

      if (isDup) {
        error = 'duplicate email address: ' + $('#Email_Address').val();
        $('#email_msg').replaceWith(error);
        return false;
      } else {
        form.submit();
        return true;
      }
    },
    messages: {
      First_Name: " First name required",
      Last_Name: " Last name required",
      Email_Address: {
        required: " email required",
        email: " email must be of the format: 'name@domain.com'"
      }
    },
    errorPlacement: function(error, element) {
      if (element.attr("name") == "First_Name" )
        error.insertBefore("#first_msg");
      else if (element.attr("name") == "Last_Name" )
        error.insertBefore("#last_msg");
      else if (element.attr("name") == "Email_Address" ) {
        error.insertBefore("#email_msg");
      } else
        error.insertAfter(element);
},
  });  
});

【问题讨论】:

    标签: jquery ajax validation


    【解决方案1】:

    您的问题与 jQuery Validate 无关。在提交处理程序的开头设置$('#email_msg').text('')

    【讨论】:

    • 这并没有完全做到,因为验证失败,所以提交处理程序似乎没有被调用。相反,我在旧的“重复电子邮件”消息之前插入了新的验证错误。像这样:email requiredduplicate email address: lew@test.com
    • 对 $.ajax 的调用是异步的。您需要检查 is_dup 并在成功处理程序中而不是在它之外提交表单。 if (msg === "1") { form.submit(); } else { &lt;show error message&gt; }
    • 这有帮助。我还需要将 $('#email_msg').text('') 放在 errorPlacement 的开头,然后效果很好。感谢您的帮助。
    • 如果我的回答有帮助,请务必接受它,因为它是正确的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多