表单提交后,提交按钮不可用,防止用户多次提交

70 篇文章 0 订阅

转载:http://blog.csdn.net/freshlover/article/details/9235189        http://blog.csdn.net/milife2012/article/details/8295437

防止表单提交按钮多次提交的办法 


如果表单是通过onsubmit进行Ajax提交,注意将表单提交按钮input type属性设为button,尽量不要设置为submit类型。
另外,在提交事件发出后,最好将提交按钮设置为disabled,防止由于网络延时问题,让用户有机会进行多次点击重复提交。

如果使用jQuery的话,只需要在onsubmit函数中的开始位置加一句:$("#submit").attr("disabled","disabled");或者向如下方法另行定义一个jQuery函数来进行控制:
    $("form").submit(function(){  
    $(":submit",this).attr("disabled","disabled");  
    });  

在事件处理程序体内,用:submit选择器来获取表单内所有的提交按钮,并将disable特性值改为disabled(w3c标准属性写法)。请注意,建立匹配集的时候我们提供this的上下文值,this指针总是引用已绑定事件的页面元素。

使用原生javascript的话,可以    
    document.forms[0].elements[0].disabled = true;    //true的标准写法为'disabled'
    document.forms[0].submit();

但是通过js来控制并不能从根本上杜绝伪造表单攻击等网络安全问题,服务器端也应该对此采取相应措施。

同时,服务器端再次处理,去重处理接收的json数据

[php]  view plain copy
  1. $res_json = $_POST['postJson'];  
  2. $res_json = str_replace('\\', '', $res_json);  
  3. $array = json_decode($res_json, true);  
  4. //if($id == 8261){debug(self :: unique_arr($array));}  
  5. $array = self :: unique_arr($array);  

一位数组可以用array_unique和array_flip方法处理,二维数组去除重复元素的处理:

[php]  view plain copy
  1. public function unique_arr($array2D,$stkeep=false,$ndformat=true)  
  2. {  
  3.     // 判断是否保留一级数组键 (一级数组键可以为非数字)  
  4.     if($stkeep$stArr = array_keys($array2D);  
  5.     // 判断是否保留二级数组键 (所有二级数组键必须相同)  
  6.     if($ndformat$ndArr = array_keys(end($array2D));  
  7.     //降维,也可以用implode,将一维数组转换为用逗号连接的字符串  
  8.     foreach ($array2D as $v){  
  9.         $v = join(",",$v);  
  10.         $temp[] = $v;  
  11.     }  
  12.     //去掉重复的字符串,也就是重复的一维数组  
  13.     $temp = array_unique($temp);  
  14.     //再将拆开的数组重新组装  
  15.     foreach ($temp as $k => $v)  
  16.     {  
  17.         if($stkeep$k = $stArr[$k];  
  18.         if($ndformat)  
  19.         {  
  20.             $tempArr = explode(",",$v);  
  21.             foreach($tempArr as $ndkey => $ndval$output[$k][$ndArr[$ndkey]] = $ndval;  
  22.         }  
  23.         else $output[$k] = explode(",",$v);  
  24.     }  
  25.     return $output;  
  26. }     


[html]  view plain copy
  1. <html>  
  2. <head>  
  3.     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  4.     <title>表单提交后按钮禁用</title>  
  5. <script type="text/javascript">  
  6. function sub() {  
  7.     document.forms[0].elements[0].disabled = true;  
  8.     document.forms[0].submit();  
  9. }  
  10. </script>  
  11. </head>  
  12. <body>  
  13.     <form action="login.action" method="post">  
  14.         <input type="button" name="btn" value="提交表单" onclick="return sub();" />  
  15.     </form>  
  16. </body>  
  17. </html>  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值