我有一个表单,我首先进行验证,然后通过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中的文本。我们可以从错误对象中获取文本值吗?如果是这样,怎么样?或者是否有更好的方法可以使这两种工作更加相同?
答案 0 :(得分:0)
我没有完全明白你的问题。
如果您在发生错误时显示错误,并且修复了错误仍然存在错误,那是因为您没有在al处清空错误位置。 解决方案就在您发送新请求之前,请将您的错误放置为空。
您可以使用jquery Dialog在替代方法中显示错误。
答案 1 :(得分:0)
引用:“我们可以从错误对象中获取文本值吗?如果是这样,怎么做?”
您可以通过以下方式从error
对象获取文本:
error.text()
根据您的使用方式,您可能需要将其格式化为:
$(error).text()