【发布时间】:2015-03-02 13:23:21
【问题描述】:
我正在使用 AJAX 调用来验证表单中的电子邮件字段。这是必要的,因为我需要验证电子邮件地址是否已被占用。 在我第一次尝试导致 ajax 请求无限循环后,我发现 this solution 似乎工作正常。
例外:我需要在表单实际提交之前单击两次提交。 有人知道为什么会这样吗?
这是我的 js 代码的最小示例:
$('form').submit(function(event){
event.preventDefault();
$.post('/echo/json', {'mail': $('#test').val()}, function(data){
//decide if valid or not based on data
//we assume it's valid an want to submit the form now!
$('form').unbind().submit();
//we should only see this for a very short time
$('.info').text('should have already submitted');
}, 'json');
});
这是jsfiddle。
编辑: 对不起,我想我不是很清楚。我插入了一些 cmets 来澄清: 我想使用 AJAX 请求的响应来决定是否提交表单,如果没有则显示错误。不提交效果很好,但如果邮件地址有效,则需要点击两次提交才能实际提交。该示例模拟了这种情况。
unbind() 是必要的,否则我会创建一个无限循环($('form').submit(...) 将被再次调用)。
此外 jQuery.post() 是异步的,因此在成功处理程序中调用 event.preventDefault() 将不起作用,因为表单已经提交了。
【问题讨论】:
标签: jquery ajax validation preventdefault