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 相关文章推荐
Code: write(s,d) 输出连续字符串
Aug 19 Javascript
高效的表格行背景隔行变色及选定高亮的JS代码
Dec 04 Javascript
JavaScript资源预加载组件和滑屏组件的使用推荐
Mar 10 Javascript
jQuery插件dataTables添加序号列的方法
Jul 06 Javascript
第一次记录Bootstrap table学习笔记(1)
May 18 Javascript
详解webpack打包vue时提取css
May 26 Javascript
ReactNative列表ListView的用法
Aug 02 Javascript
jQuery+datatables插件实现ajax加载数据与增删改查功能示例
Apr 17 jQuery
解决Layui数据表格中checkbox位置不居中的方法
Aug 15 Javascript
基于vue实现滚动条滚动到指定位置对应位置数字进行tween特效
Apr 18 Javascript
elementUI select组件value值注意事项详解
May 29 Javascript
使用 Github Actions 自动部署 Angular 应用到 Github Pages的方法
Jul 20 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使用APC实现实时上传进度条功能
2015/10/26 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
2018/06/16 PHP
RR vs IO BO3 第一场2.13
2021/03/10 DOTA
JavaScript中的View-Model使用介绍
2011/08/11 Javascript
关于JavaScript中原型继承中的一点思考
2012/07/25 Javascript
浅析JS动态创建元素【两种方法】
2016/04/20 Javascript
Bootstrap 组件之按钮(二)
2016/05/11 Javascript
jstree创建无限分级树的方法【基于ajax动态创建子节点】
2016/10/25 Javascript
ajax图片上传,图片异步上传,更新实例
2016/12/30 Javascript
详解node中创建服务进程
2017/05/09 Javascript
react-native ListView下拉刷新上拉加载实现代码
2017/08/03 Javascript
JavaScript中附件预览功能实现详解(推荐)
2017/08/15 Javascript
VUE element-ui 写个复用Table组件的示例代码
2017/11/18 Javascript
vue中使用sessionStorage记住密码功能
2018/07/24 Javascript
angularjs通过过滤器返回超链接的方法
2018/10/26 Javascript
js删除数组中某几项的方法总结
2019/01/16 Javascript
js针对图片加载失败的处理方法分析
2019/08/24 Javascript
[01:01:24]LGD vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
20招让你的Python飞起来!
2016/09/27 Python
python3.5实现socket通讯示例(TCP)
2017/02/07 Python
Python 基础教程之str和repr的详解
2017/08/20 Python
python实现括号匹配的思路详解
2018/08/23 Python
Python创建字典的八种方式
2019/02/27 Python
Python  Django 母版和继承解析
2019/08/09 Python
Django实现列表页商品数据返回教程
2020/04/03 Python
Html5 滚动穿透的方法
2019/05/13 HTML / CSS
中科方德软件测试面试题
2016/04/21 面试题
英文简历中的自荐信范文
2013/12/14 职场文书
电厂厂长岗位职责
2014/01/02 职场文书
校三好学生主要事迹
2014/01/11 职场文书
护士检查书
2014/01/17 职场文书
2014年医院十一国庆节活动方案
2014/09/15 职场文书
房屋租赁委托书范本
2014/10/04 职场文书
工作保证书
2015/01/17 职场文书
入党培养人考察意见
2015/06/08 职场文书
mysql 索引的数据结构为什么要采用B+树
2022/04/26 MySQL