带有加载微调器的 jQuery 验证

Posted

技术标签:

【中文标题】带有加载微调器的 jQuery 验证【英文标题】:jQuery validation with loading spinner 【发布时间】:2014-12-07 11:34:24 【问题描述】:

所以我知道很多关于 Jquery 验证库和页面加载微调器的问题都被单独询问过,我可以让这两个项目独立工作,但是我在使用这两个项目时并没有取得很大的成功。

简而言之,我有一个使用 jQuery 验证库的电子邮件表单。当按下“发送”时,我希望加载 GIF(已经在页面上,但 display: none)在控制器执行其业务时变得可见(但前提是字段有效)。据我所知,在根据documentation 验证页面后,我需要使用.valid(),但是它需要首先运行.validate()。如果我通过以下方式解决问题,表单会在 GIF 播放之前提交:

<script>$("#emailForm").validate();</script>
<script>
    $("#Send").click(function () 
        if($("#emailForm").valid())  $(".loaderWheel").show(); 
    );
</script>

如果我这样处理,即使表单无效,GIF 也会变得可见,并且永远不会再次消失:

<script>$("#emailForm").validate();</script>
<script>
    $("#Send").click(function () 
        $(".loaderWheel").show();
        if(!$("#emailForm").valid())  $(".loaderWheel").hide(); 
    );
</script>

如何使 GIF 仅在表单有效且回发页面加载时可见?

【问题讨论】:

#Send 和提交按钮还是通过ajax 提交? #Send 是提交按钮。 当您提交表单时,会离开页面,因此永远不会显示微调器。我假设您的控制器正在执行return View(),但这会返回一个新页面,而不是您当前所在的页面。 好的,那么我应该对我的结构进行哪些更改?没错,在发送时,它会转到一个 HttpPost ActionResult 方法,该方法返回带有状态(确认、失败)消息的相同视图。 我不确定您为什么要这样做,但如果您 submit the form via ajax,那么您将留在同一页面上 【参考方案1】:

尝试覆盖验证器中的 submitHandler 方法。它仅在表单有效时执行。所以,这个或类似的东西应该可以工作。检查文档。

$().ready(function() 
  $("#profile").validate(
    submitHandler: function(form) 
      $("#spinner").show();
      form.submit();
    ,
    rules: 
      f_firstName: 
        required  : true,
        minlength : 2
      ,
      f_lastName: 
        required  : true,
        minlength : 2
      ...

【讨论】:

以上是关于带有加载微调器的 jQuery 验证的主要内容,如果未能解决你的问题,请参考以下文章

使用微调器加载 jQuery 整个 HTML 页面

jQuery Ajax 微调器未在 IE7 中显示

在 jQuery Mobile 中的 Ajax 调用中显示页面加载微调器

AngularJS - 动画回调/序列

第二百一十八节,jQuery EasyUI,TimeSpinner(时间微调)组件

什么是用于查找微调器的jquery语法