jquery ajax表单验证

时间:2013-02-14 02:53:01

标签: jquery ajax jquery-validate

我有一个表单,我首先进行验证,然后通过ajax提交它,其中检查了一些字段,例如用户名,这可能已存在于数据库中。我想在相关元素后面显示这些错误条件中的任何一个。表单元素如下所示:

  <span class="inputRow">
    <span class="formLabel">
        <label for="user_name">User Name</label>
    </span>
    <span class="formInput">
        <input id="user_name" name="user_name" class="inputText required" title="User Name" tabindex="3" type="text" value="<?= $user_name ?>" >
        <span class="formError"><span id="user_msg"></span></span>
    </span>
  </span>

我有一个典型的验证/ errorPlacement代码,如下所示:

  errorPlacement: function(error, element) 
  {
    if (element.attr("name") == "user_name" )
        error.insertBefore("#user_msg");
    else
        error.insertAfter(element);
  },
});

要提交表单,我有一个如下所示的提交处理程序:

submitHandler: function(form) {

  $.ajax({
    type:'POST', 
    url: 'add_user.php', 
    data:$('#reg_form').serialize(), 
    success: function(response) {
      if (response.status == "error") {
        if (!response.hasOwnProperty('user_name'))
          $("#user_msg").text("");
        else if (response.user_name.length > 0)
          $("#user_msg").text(response.user_name);
      }
    }
  });
},

返回的响应是一个JSON数组,我可以很好地得到错误消息。这在我第一次提交表单时效果很好。如果我有一个重复的用户名,正确显示,或者没有输入用户名,那么也会正确显示。当我提交表单并获得有关文件中重复用户名的响应时,问题就出现了。然后,如果我清除user_name字段并尝试再次提交表单,则重复的用户名消息将保留在那里,并且还会显示消息,指出需要用户名。

对我而言,似乎因为errorPlacement函数使用error.insertBefore(“#user_msg”)而显示它们的方式存在冲突,但是ajax函数的返回使用$(“#user_msg”)。text( )。所以insertBefore()不会删除以前的text()值,但我还没有找到任何其他方法来显示errorPlacement中的文本。我们可以从错误对象中获取文本值吗?如果是这样,怎么样?或者是否有更好的方法可以使这两种工作更加相同?

2 个答案:

答案 0 :(得分:0)

我没有完全明白你的问题。

如果您在发生错误时显示错误,并且修复了错误仍然存​​在错误,那是因为您没有在al处清空错误位置。 解决方案就在您发送新请求之前,请将您的错误放置为空。

您可以使用jquery Dialog在替代方法中显示错误。

答案 1 :(得分:0)

  

引用:“我们可以从错误对象中获取文本值吗?如果是这样,怎么做?”

您可以通过以下方式从error对象获取文本:

error.text()

根据您的使用方式,您可能需要将其格式化为:

$(error).text()