使用 jQuery 验证验证和访问多个页面上的表单

Posted

技术标签:

【中文标题】使用 jQuery 验证验证和访问多个页面上的表单【英文标题】:Validating and accessing multiple on-page forms with jQuery validation 【发布时间】:2021-10-13 12:28:40 【问题描述】:

我在一个页面上有多个动态生成的表单(用于上传文件)需要验证(尽管一次提交一个表单): 格式是这样的(其中表单的id中的X是一个数字):

<form class="uploader" method="post" action="?task=edit" 
id="sectionsX" name="sections" 
enctype="multipart/form-data">
   <button class=" btn btn-primary" type="submit">Submit</button>
</form>

现在,如果有效,希望在提交时更改button html。 以下代码不起作用:

我也不需要验证所有表单 - 显然只需要提交的表单。下面的each 循环是否会发生这种情况?

 $('.uploader').each(function () 
    $(this).validate(
        invalidHandler: function(event, validator) 
            alert('Please be sure to fill out all mandatory fields');
        ,
        submitHandler: function(form)  // <- pass 'form' argument in
            $(this).find("button").html('Processing...').attr("disabled", "disabled");
            form.submit(); // <- use 'form' argument here.
        
    );
 );

【问题讨论】:

它不起作用,因为插件不是由&lt;button&gt; 触发的,除非您使用type="submit" 属性。因此,尝试使用submitHandler 将按钮更改为提交是永远不会发生的。除非您首先使用type="submit" buttoninput,否则它不会触发submitHandler 函数。 @Sparky - 当然是type=submit 按钮,这只是简化的代码。为了清楚起见,添加了。 “我也不需要验证所有表单 - 显然只需要验证提交的表单。下面的每个循环都会发生这种情况吗?” - 当然不是. .validate() 方法只是每个表单的初始化设置。 【参考方案1】:

为了在submitHandler 回调函数中使用$(this),您需要将它分配给一个变量。试试var myform = $(this)

$('.uploader').each(function() 
    var myform = $(this);
    myform.validate(
        invalidHandler: function(event, validator) 
            alert('Please be sure to fill out all mandatory fields');
        ,
        submitHandler: function(form)  // <- pass 'form' argument in
            myform.find("button").html('Processing...').attr("disabled", "disabled");
            //form.submit(); // <- use 'form' argument here.
        
    );
);        

演示:jsfiddle.net/q4sy1vfe/

我注释掉了form.submit(),因此您实际上可以看到该按钮已被更改和禁用。

【讨论】:

以上是关于使用 jQuery 验证验证和访问多个页面上的表单的主要内容,如果未能解决你的问题,请参考以下文章

登录页面上的 jQuery Mobile 表单验证

如何使用 jQuery Validate 正确验证放置在多个选项卡上的 Twitter 引导表单?

模糊上的jquery验证插件[重复]

Jquery在可访问的多步骤表单上验证

仅保存按钮上的 jQuery 表单验证

Zend Form - 一页中的多个表单和(CSRF)令牌验证