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 相关文章推荐
封装了一个js图片轮换效果的函数
Sep 28 Javascript
如何将一个String和多个String值进行比较思路分析
Apr 22 Javascript
ajax请求get与post的区别总结
Nov 04 Javascript
JavaScript动态改变表格单元格内容的方法
Mar 30 Javascript
jQuery zclip插件实现跨浏览器复制功能
Nov 02 Javascript
angularjs 实现带查找筛选功能的select下拉框实例
Jan 11 Javascript
vue中如何创建多个ueditor实例教程
Nov 14 Javascript
Angular 利用路由跳转到指定页面的指定位置方法
Aug 31 Javascript
angular6的响应式表单的实现
Oct 10 Javascript
JS闭包原理与应用经典示例
Dec 20 Javascript
vue中使用elementUI组件手动上传图片功能
Dec 13 Javascript
详解JavaScript 异步编程
Jul 13 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下载文件的详解
2013/06/02 PHP
提升PHP性能的21种方法介绍
2013/06/25 PHP
php Session存储到Redis的方法
2013/11/04 PHP
解决Laravel blade模板转义html标签的问题
2019/09/03 PHP
JS比较两个时间大小的简单示例代码
2013/12/20 Javascript
jQuery选择器源码解读(八):addCombinator函数
2015/03/31 Javascript
js由下向上不断上升冒气泡效果实例
2015/05/07 Javascript
超详细的JS弹出窗口代码大全
2020/04/18 Javascript
js自定义QQ菜单效果
2017/01/10 Javascript
phantomjs导出html到pdf的方法总结
2017/10/19 Javascript
Vue-Router2.X多种路由实现方式总结
2018/02/09 Javascript
D3.js实现拓扑图的示例代码
2018/06/30 Javascript
JS使用栈判断给定字符串是否是回文算法示例
2019/03/04 Javascript
vue防止花括号{{}}闪烁v-text和v-html、v-cloak用法示例
2019/03/13 Javascript
JS实现求字符串中出现最多次数的字符和次数示例
2019/07/05 Javascript
vue 地区选择器v-distpicker的常用功能
2019/07/23 Javascript
微信小程序登录时如何获取input框中的内容
2019/12/04 Javascript
JS+DIV实现拖动效果
2020/02/11 Javascript
单线程JavaScript实现异步过程详解
2020/05/19 Javascript
vue实现简易图片左右旋转,上一张,下一张组件案例
2020/07/31 Javascript
[01:19:33]DOTA2-DPC中国联赛 正赛 iG vs VG BO3 第一场 2月2日
2021/03/11 DOTA
python实现log日志的示例代码
2018/04/28 Python
python web框架 django wsgi原理解析
2019/08/20 Python
Python接口测试数据库封装实现原理
2020/05/09 Python
Django返回HTML文件的实现方法
2020/09/17 Python
解决Pyinstaller打包软件失败的一个坑
2021/03/04 Python
深入浅析HTML5中的SVG
2015/11/27 HTML / CSS
C#如何判断当前用户是否输入某个域
2015/12/07 面试题
秘书行业自我鉴定范文
2013/12/30 职场文书
学校联谊活动方案
2014/02/15 职场文书
银行优秀员工事迹材料
2014/05/29 职场文书
招商引资工作汇报材料
2014/10/28 职场文书
财务会计求职信范文
2015/03/20 职场文书
公司开除员工通知
2015/04/22 职场文书
酒店员工手册范本
2015/05/14 职场文书
超市员工管理制度
2015/08/06 职场文书