js模拟点击以提交表单为例兼容主流浏览器


Posted in Javascript onNovember 29, 2013

在实际的应用开发中,我们会常常用到JS的模事件,但有时会遇到一些问题,比如说点击事件,举个简单的例子,点击表单外的“提交”按钮来提交表单。上代码吧。

Html:

<h3>请单击“提交”,测试提交按钮的单击事件也被触发了。</h3> 
<button id="btn">提交</button> 
<form action="#" method="get" id="form"> 
<input type="text" name="site" value="www.woiweb.net" readonly/> 
<input id="subbtn" type="submit" value="先别点击此按钮提交" onclick="alert('我已经提交了');"/> 
</form>

Javscript:
<script type="text/javascript"> 
var sub = document.getElementById("subbtn"); 
var btn = document.getElementById("btn"); 
//通用方法 
btn.onclick = function() { 
sub.click(); 
} 
</script>

经过测试,IE,FF,Chrome,Opera,Safari都没有问题,均可正常提交表单。

但在实际的设计中,为了让提交按钮更好看,buildder经常把它们用a标签来处理,加个背景图片来模拟按钮,我们仍然用上面的思路来尝试,增加一个a标签,让它来提交表单,我们仅修改html。

Html:

<h3>请单击“提交”,测试提交按钮的单击事件也被触发了。</h3> 
<button id="btn">提交</button> 
<form action="#" method="get" id="form"> 
<input type="text" name="site" value="www.woiweb.net" readonly/> 
<!--<input id="subbtn" type="submit" value="先别点击此按钮提交" onclick="alert('我已经提交了');"/> --> 
<a id="subbtn" href="javascript:;" onclick="alert('在此调用提交表单的方法')">模拟提交按钮</a> 
</form>

Javascript:
<script type="text/javascript"> 
var sub = document.getElementById("subbtn"); 
var btn = document.getElementById("btn"); 
//通用方法 
btn.onclick = function() { 
sub.click(); 
} 
</script>

运行后,问题出现了,IE、FF、Opera均OK,但Chrome和Safari不能正常运行,后来网上搜索了下,发现a标签并不是和按钮一样有onclick()事件的,解决办法是针对 IE 和 FF编写不同的逻辑,JS代码如下:
javascript:
<script type="text/javascript"> 
var sub = document.getElementById("subbtn"); 
var btn = document.getElementById("btn"); 
//通用方法 
btn.onclick = function() { 
//sub.click(); 
if (/msie/i.test(navigator.userAgent)) //IE 
{ 
sub.fireEvent("onclick"); 
} else { 
var e = document.createEvent('MouseEvent'); 
e.initEvent('click', false, false); 
sub.dispatchEvent(e); 
} 
} 
</script>

至此,问题解决,虽然这个问题很简单,但很容易被大家忽略,贴出来和大家一起分享。

语法:

createEvent(eventType)

参数

 描述

eventType 想获取的 Event 对象的事件模块名。关于有效的事件类型列表,请参阅”说明”部分。

返回值

返回新创建的 Event 对象,具有指定的类型。

抛出

如果实现支持需要的事件类型,该方法将抛出代码为 NOT_SUPPORTED_ERR 的 DOMException 异常。

说明

该方法将创建一种新的事件类型,该类型由参数 eventType 指定。注意,该参数的值不是要创建的事件接口的名称,而是定义那个接口的 DOM 模块的名称。

下表列出了 eventType 的合法值和每个值创建的事件接口:

参数

事件接口

初始化方法
HTMLEvents

HTMLEvent iniEvent()
MouseEvents

MouseEvent iniMouseEvent()
UIEvents

UIEvent

iniUIEvent()

用该方法创建了 Event 对象以后,必须用上表中所示的初始化方法初始化对象。关于初始化方法的详细信息,请参阅 Event 对象参考。

该方法实际上不是由 Document 接口定义的,而是由 DocumentEvent 接口定义的。如果一个实现支持 Event 模块,那么 Document 对象就会实现 DocumentEvent 接口并支持该方法。

Javascript 相关文章推荐
Javascript 二维数组
Nov 26 Javascript
JQuery仿小米手机抢购页面倒计时效果
Dec 16 Javascript
深入了解JavaScript中的Symbol的使用方法
Jul 28 Javascript
深入理解JS addLoadEvent函数
May 20 Javascript
基于d3.js实现实时刷新的折线图
Aug 03 Javascript
Javascript中函数名.length属性用法分析(对比arguments.length)
Sep 16 Javascript
原生js实现水平方向无缝滚动
Jan 10 Javascript
jQuery实现的简单拖动层示例
Feb 22 Javascript
JQuery 封装 Ajax 常用方法(推荐)
May 21 jQuery
微信小程序实现点击空白隐藏的方法示例
Aug 13 Javascript
java遇到微信小程序 &quot;支付验证签名失败&quot; 问题解决
Dec 22 Javascript
vue2.* element tabs tab-pane 动态加载组件操作
Jul 19 Javascript
JS实现日期加减的方法
Nov 29 #Javascript
js弹出层永远居中实现思路及代码
Nov 29 #Javascript
根据表格中的某一列进行排序的javascript代码
Nov 29 #Javascript
JS取文本框中最小值的简单实例
Nov 29 #Javascript
js中的eventType事件及其浏览器支持性介绍
Nov 29 #Javascript
js简单实现根据身份证号码识别性别年龄生日
Nov 29 #Javascript
JS求平均值的小例子
Nov 29 #Javascript
You might like
使用字符串函数输出整数化的PHP版本号
2006/10/09 PHP
Yii2.0表关联查询实例分析
2016/07/18 PHP
优秀js开源框架-jQuery使用手册(1)
2007/03/10 Javascript
javascript showModalDialog模态对话框使用说明
2009/12/31 Javascript
JS 获取select(多选下拉)中所选值的示例代码
2013/08/02 Javascript
node.js中RPC(远程过程调用)的实现原理介绍
2014/12/05 Javascript
JavaScript中的substr()方法使用详解
2015/06/06 Javascript
js代码验证手机号码和电话号码是否合法
2015/07/30 Javascript
js console.log打印对像与数组用法详解
2016/01/21 Javascript
Javascript下拉刷新的简单实现
2017/02/14 Javascript
JS中去掉array中重复元素的方法
2017/05/26 Javascript
js装饰设计模式学习心得
2018/02/17 Javascript
基于vue循环列表时点击跳转页面的方法
2018/08/31 Javascript
微信小程序开发的基本流程步骤
2019/01/31 Javascript
JavaScript前后端JSON使用方法教程
2020/11/23 Javascript
原生js实现下拉框选择组件
2021/01/20 Javascript
[46:14]VGJ.T vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python使用paramiko实现远程拷贝文件的方法
2016/04/18 Python
Python装饰器用法实例总结
2018/02/07 Python
Python读写/追加excel文件Demo分享
2018/05/03 Python
python实现字符串和字典的转换
2018/09/29 Python
Python单例模式的四种创建方式实例解析
2020/03/04 Python
Python 防止死锁的方法
2020/07/29 Python
HTML5实现预览本地图片
2016/02/17 HTML / CSS
英国最大的网上药品商店:Chemist Direct
2017/12/16 全球购物
Haglöfs瑞典官方网站:haglofs火柴棍,欧洲顶级户外品牌
2018/10/18 全球购物
三星法国官方网站:Samsung法国
2019/10/31 全球购物
公司门卫管理制度
2014/02/01 职场文书
初中校园广播稿
2014/02/02 职场文书
企业新年寄语
2014/04/04 职场文书
物流管理专业推荐信
2014/09/06 职场文书
2014光棍节单身联谊活动策划书
2014/10/10 职场文书
2014年幼儿园保育工作总结
2014/12/02 职场文书
行政处罚事先告知书
2015/07/01 职场文书
mybatis中注解与xml配置的对应关系和对比分析
2021/08/04 Java/Android
MySQL利用UNION连接2个查询排序失效详解
2021/11/20 MySQL