利用beforeSend实现提交加载中、form表单的重复提交等前端功能

前文

  在用JQ+bootstrap写前端的时候,有时需要实现点击按钮后失效的功能,比如下载按钮,为了避免网络延迟而引起的页面不及时跳转,让用户多次点击按钮,造成的服务器压力和用户体验就都不友好。发现Ajax里的beforeSend来实现这功能简直不要太棒。

beforeSend

  官方网址:http://api.jquery.com/Ajax_Events/
  依据官方网址,基本用法就是两个,访问页面前需要执行什么:内容填写到beforeSend里function;访问结束后需要实现什么,就填写到complete里面。

$.ajax({
   beforeSend: function(){
     // Handle the beforeSend event
   },
   complete: function(){
     // Handle the complete event
   }
   // ......
 });

第一个用法:禁止form表单的重复提交

  比如我的需求:点击下载按钮后执行下载时按钮失效,下载完后按钮再恢复使用。因为下载Excel或者csv必须得是form表单,而用form表单要实现禁止重复提交就如下所示,关于主体部分我这边就没写了,具体的导出按钮就可以如下代码所写。

<form action="/download/" method="post" onsubmit="return dosubmit()" target="_blank">
		<div>
                <input id='limit' style="float:right; margin:5px;" type="submit" value="导出">
       </div>
</form>
$("form").submit(function(){
            $.ajax({
              beforeSend:function () {
                    $(":submit",this).attr("disabled","disabled");
              },
              complete: function () {
                    $(":submit",this).removeAttr("disabled");
              }
            })
        });

  相比于用form表单来实现ajax,正常的ajax实现无疑更简单的多,这边也不过多介绍了。

第二个用法:实现加载中的效果

  有时用按钮失效也并不那么友好,比如长时间的网络io,如果只是失效,那用户只能白白等着了,用户体验很差,此时就可以用gif图片加弹窗(比如加载中…)来提示用户正在网络IO。

$("form").submit(function(){
            $.ajax({
              beforeSend:function () {
                    show_alert("<div style='text-align:center;'><p style='text-align:center;'>正在查询数据并发往审批...</p><br><img src='/static/images/loading.gif'></div>")
              },
              complete: function () {
                close_alert()
              }
            })
        });
function show_alert(msg, status) {
    if(status==610)
    {
        // 登录过期,刷新或重新登录
        $("#dlg2").html(msg)
        $("#dlg2").dialog("open")
    }
    else
    {
        // 显示错误信息
        $("#dlg").html(msg)
        $("#dlg").dialog("open")
    }
}

function close_alert() {
    $("#dlg").html("")
    $("#dlg").dialog("close")
    $("#dlg2").html("")
    $("#dlg2").dialog("close")
}

  比如延续上者,我们就可以通过上述代码来实现加载中的效果,实现效果如下:
在这里插入图片描述

总结

  这次就到这了,欢迎评论讨论~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值