Jquery-只验证多个表单中的一个表单

Jquery-只验证多个表单中的一个表单,jquery,forms,validation,jquery-validate,Jquery,Forms,Validation,Jquery Validate,所以,我在So上浏览了很多线程,但找不到我的相关查询。嗯,我有一个类似于SO的网络应用程序,在这里可以提问,人们可以自由地对问题进行评论/回答(也可以对答案进行评论) 我通过API获得特定问题的答案,形成相应的HTML并将其附加到div中。我的HTML有点像这样:- <div> <p> Some Answer </p> <div class="comments"></div> <form id="form

所以,我在So上浏览了很多线程,但找不到我的相关查询。嗯,我有一个类似于SO的网络应用程序,在这里可以提问,人们可以自由地对问题进行评论/回答(也可以对答案进行评论)

我通过API获得特定问题的
答案
,形成相应的HTML并将其附加到div中。我的HTML有点像这样:-

<div>
   <p> Some Answer </p>
   <div class="comments"></div>
       <form id="form_62" class="comment_form" method="POST" action="URL"> <!--This id is variable-->
           <textarea rows="3" name="comment"></textarea>
           <button type="submit">Comment </button>
       </form>
    </div>
</div>
这不符合预期


所以,我的问题是如何验证提交的当前表单?

如果动态添加了任何带有表单的div,则创建一个基于Id对表单应用验证的函数,并在动态添加div或表单时调用该函数

    function applyValidate(id){
       $(id).validate({
         ignore: '',
         onsubmit : false,
         rules: {
           comment: {
             required: true,
             minlength: 10
           }
         }
      });
   } 
若一次在页面中加载所有表单,并且希望在每个表单上绑定validate,那个么可以使用下面的代码

$(函数(){
$(文档).on('submit','comment_form',函数(e){
form_id=$(this).id
e、 预防默认值();
if($(this).valid()){
console.log('success')
}
});
/*如果在页面中未同时动态添加和呈现所有表单,则必须对每个表单应用validate,否则在$(function(){})之外添加applyValidate(id)函数;并在动态添加表单时调用applyValidate(id)函数*/
$('.comment_form')。每个(函数(){
//附加到页面上的所有表单元素
$(此)。验证({
忽略:“”,
问题:错,
规则:{
评论:{
要求:正确,
最小长度:10
}
}
});
});
});

一些答案

评论 一些答案

评论 一些答案

评论
我的评论中提到的代码问题:

$(function(){

    // can NOT use submit handler since the validate plugin is already capturing this event
    $(document).on('submit', '.comment_form', function(e){ 

        ....
        // can NOT use 'valid()' before 'validate()' has initialized
        if($(this).valid()){ 
            ....
        }
    })

    // $(this) is meaningless here since it's not inside a pending jQuery method being invoked
    $(this).validate({
        ....
    });
})
提交表单时,您不会调用
.validate()
.validate()
方法仅用于初始化表单上的插件,而不调用表单验证。因此,通常在加载页面时调用
.validate()

由于在加载页面时,您的表单还不存在,因此只有在创建动态
表单时才调用
.validate()
,而不是提交表单。换句话说,调用
.validate()
方法是创建此表单的任何函数中的最后一步,因为您的提交按钮是
type=“submit”
验证插件将自动捕获它,您不需要
submit
单击
处理程序来获得验证

$(function(){

    function create_dynamic_form() {

        // code to dynamically create this form HERE


        // initialize validation on this new form ->

        $('#this-new-form-id').validate({
            ....
        });

    });

});

如果您向我们展示了动态创建新表单的实际代码,我的示例可能会更有效。

当您说当前表单时,表单元素的ID是什么变化,对吗?是的。确实如此……我相信您必须使用类,请参见下面的答案。请显示动态创建表单的代码。
$(function(){

    function create_dynamic_form() {

        // code to dynamically create this form HERE


        // initialize validation on this new form ->

        $('#this-new-form-id').validate({
            ....
        });

    });

});