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 相关文章推荐
Ruffy javascript 学习笔记
Nov 30 Javascript
Firebug入门指南(Firefox浏览器)
Aug 21 Javascript
jquery blockUI 遮罩不能消失与不能提交的解决方法
Sep 17 Javascript
浅谈Javascript Base64 加密解密
Dec 28 Javascript
jQuery实现点击图片翻页展示效果的方法
Feb 16 Javascript
flexslider.js实现移动端轮播
Feb 05 Javascript
H5手机端多文件上传预览插件
Apr 21 Javascript
微信小程序实现流程进度的图样式功能
Jan 16 Javascript
vuex 的简单使用
Mar 22 Javascript
vue实现的树形结构加多选框示例
Feb 02 Javascript
Vue实现表格批量审核功能实例代码
May 28 Javascript
详解微信小程序自定义组件的实现及数据交互
Jul 22 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微信支付通知的处理方式
2014/05/25 PHP
解析PHP强制转换类型及远程管理插件的安全隐患
2014/06/30 PHP
php开发工具有哪五款
2015/11/09 PHP
PHP判断数组是否为空的常用方法(五种方法)
2017/02/08 PHP
把JS与CSS写在同一个文件里的书写方法
2007/06/02 Javascript
前端开发必须知道的JS之原型和继承
2010/07/06 Javascript
删除select中所有option选项jquery代码
2013/08/12 Javascript
JS性能优化笔记搜索整理
2013/08/21 Javascript
Javascript递归打印Document层次关系实例分析
2015/05/15 Javascript
javascript实现手机震动API代码
2015/08/05 Javascript
JavaScript如何实现对数字保留两位小数一位自动补零
2015/12/18 Javascript
JS 通过系统时间限定动态添加 select option的实例代码
2016/06/09 Javascript
angularjs2中父子组件的数据传递的实例代码
2017/07/05 Javascript
axios简单实现小程序延时loading指示
2018/07/30 Javascript
JavaScript设计模式之模板方法模式原理与用法示例
2018/08/07 Javascript
JS XMLHttpRequest原理与使用方法深入详解
2020/04/30 Javascript
[51:50]完美世界DOTA2联赛 Magma vs GXR 第一场 11.07
2020/11/10 DOTA
压缩包密码破解示例分享(类似典破解)
2014/01/17 Python
python计算圆周长、面积、球体体积并画出圆
2014/04/08 Python
python with statement 进行文件操作指南
2014/08/22 Python
Python Celery多队列配置代码实例
2019/11/22 Python
浅谈在django中使用filter()(即对QuerySet操作)时踩的坑
2020/03/31 Python
基于python实现对文件进行切分行
2020/04/26 Python
关于python scrapy中添加cookie踩坑记录
2020/11/17 Python
详解css3 flex弹性盒自动铺满写法
2020/09/17 HTML / CSS
Daniel Wellington官方海外旗舰店:丹尼尔惠灵顿DW手表
2018/02/22 全球购物
Rossignol金鸡美国官网:始于1907年法国百年雪具品牌
2019/03/06 全球购物
马耳他航空公司官方网站:Air Malta
2019/05/15 全球购物
自荐信格式写作方法有哪些呢
2013/11/20 职场文书
物业管理员岗位职责范文
2013/11/25 职场文书
医学生就业推荐表自我鉴定
2014/03/26 职场文书
法制宣传教育方案
2014/05/09 职场文书
五四青年节活动总结
2015/02/10 职场文书
家长对孩子的寄语
2015/02/26 职场文书
感恩的心主题班会
2015/08/12 职场文书
初中英语教学随笔
2015/08/15 职场文书