我有一个 WordPress/BuddyPress 注册表单,我想通过 Ajax 调用处理表单提交,而不是直接提交页面。我有以下代码:
<script type="text/javascript">
jQuery(document).ready(function(){
setupValidation();
});
function setupValidation()
{
jQuery("#signup_form").validate({
submitHandler: function(form) {
jQuery("#signup_submit").attr('disabled', 'disabled');
jQuery(".form-actions").html('<img src="/img/ajax-loader.gif" /> Processing...');
jQuery.post('<?php echo $_SERVER['REQUEST_URI']; ?>', jQuery("#signup_form").serialize(), function(data) {
var response = jQuery(data).find('#signup_form');
if( jQuery(response).length )
{
jQuery('#signup_form').html(response);
setupValidation();
}
else
{
alert("Form submitted.");
top.location = self.location.href;
}
});
}
});
}
</script>
基本上,这是通过 ajax 提交表单数据,然后检查响应以查看是否有错误。如果有错误,我想用响应 HTML 替换旧表单 HTML,以便在原始表单中显示任何错误消息。
我遇到的问题是,虽然验证处理初始表单正常运行,但当出现错误并重新加载表单时,验证不会初始化。相反,在控制台中,我收到此错误:
Uncaught TypeError: Cannot read property 'settings' of undefined
每次单击或聚焦 ajax 加载表单上的字段时,都会重复此错误。此外,submitHandler 似乎第二次不起作用,表单只是提交了老式的方式。(没有阿贾克斯)
对此的任何帮助将不胜感激。似乎我缺少一些简单的东西,但我不确定它是什么。我要做的就是在通过 ajax 加载的表单上重新初始化验证代码。
提前感谢,詹姆斯。