在通过Ajax加载的表单上激活jQuery验证的正确方法是什么?

在通过Ajax加载的表单上激活jQuery验证的正确方法是什么?,jquery,ajax,wordpress,jquery-validate,buddypress,Jquery,Ajax,Wordpress,Jquery Validate,Buddypress,我有一个WordPress/BuddyPress注册表单,我希望通过Ajax调用处理表单提交,而不是直接提交页面。我有以下代码: <script type="text/javascript"> jQuery(document).ready(function(){ setupValidation(); }); function setupValidation() { jQuery("#signup_form").validate({ submitHandler:

我有一个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加载表单上的字段时,都会重复此错误。此外,提交者似乎第二次不起作用,表单只是以老式的方式提交。(没有ajax)

在此方面的任何帮助都将不胜感激。似乎我遗漏了一些简单的东西,但我不确定是什么。我只想在通过ajax加载的表单上重新初始化验证代码

提前感谢,,
James。

与其使用一组新的HTML完全重新加载表单,为什么不重新设置表单呢

如果响应中除了表单之外还包含一条重要消息,那么可能只需返回该消息并将其粘贴到表单中的某个位置

        if( jQuery(response).length )
        {
            //jQuery('#signup_form').html(response);
            jQuery('#messages').html(response);//would need to create a div with id of "messages"

            jQuery('#signup_form').data('validator').resetForm();
            jQuery('#signup_form').get(0).reset();

        }

您正在从
submitHandler
中调用
setupValidation
,它是
的一部分。validate()
已在
setupValidation
中。。。看到问题了吗
.validate()
是初始化方法,只需调用一次。在同一个表单上再次调用它没有实际意义,而且由于
submitHandler
仅在有效表单上启动,因此从其内部调用它是完全没有用的。引用OP:“基本上,这是通过ajax提交表单数据,然后检查响应是否有错误。如果有错误,我想用响应HTML替换旧表单HTML,以便与原始表单一起显示任何错误消息。“~让我说清楚。。。如果客户端验证给出错误,您希望服务器端验证给出错误消息吗?这毫无意义。与线程标题对应的代码在哪里?换句话说,加载表单的ajax在哪里?
        if( jQuery(response).length )
        {
            //jQuery('#signup_form').html(response);
            jQuery('#messages').html(response);//would need to create a div with id of "messages"

            jQuery('#signup_form').data('validator').resetForm();
            jQuery('#signup_form').get(0).reset();

        }