【发布时间】:2013-02-14 02:53:01
【问题描述】:
我有一个表单,我首先进行验证,然后通过 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: 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 的文本。我们可以从错误对象中获取文本值吗?如果是这样,怎么做?或者有没有更好的方法让这两者以同样的方式工作?
【问题讨论】:
-
显示其余代码。例如,您如何/在哪里打电话给
.validate()? -
您应该使用验证插件的
remote功能。这使您可以将 AJAX 调用与用户名相关联,而不是提交整个表单。 -
验证是这样调用的:
-
@abbaroo,请编辑您的 OP 以显示完整的
.validate()代码、form的 HTML 以及影响验证功能的任何其他事件处理程序。请做一个完整简洁的例子。
标签: jquery ajax jquery-validate