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 相关文章推荐
jQuery EasyUI 开源插件套装 完全替代ExtJS
Mar 24 Javascript
jquery 全局AJAX事件使用代码
Nov 05 Javascript
Jquery知识点三 jquery表单对象操作
Jan 17 Javascript
jquery新的绑定事件机制on方法的使用方法
Apr 15 Javascript
微信分享的标题、缩略图、连接及描述设置方法
Oct 14 Javascript
jquery.qtip提示信息插件用法简单实例
Jun 17 Javascript
微信小程序使用picker实现时间和日期选择框功能【附源码下载】
Dec 11 Javascript
React学习笔记之高阶组件应用
Jun 02 Javascript
JavaScript继承的特性与实践应用深入详解
Dec 30 Javascript
详解element上传组件before-remove钩子问题解决
Apr 08 Javascript
JS数组Reduce方法功能与用法实例详解
Apr 29 Javascript
vue从后台渲染文章列表以及根据id跳转文章详情详解
Dec 14 Vue.js
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
3
2006/10/09 PHP
eAccelerator的安装与使用详解
2013/06/13 PHP
PHP获取MSN好友列表类的实现代码
2013/06/23 PHP
PHP使用CURL获取302跳转后的地址实例
2014/05/04 PHP
PHP 9 大缓存技术总结
2015/09/17 PHP
PHP  实现等比压缩图片尺寸和大小实例代码
2016/10/08 PHP
详解配置 Apache 服务器支持 PHP 文件的解析
2017/02/15 PHP
PHP实现简单计算器小程序
2020/08/28 PHP
PHP的mysqli_rollback()函数讲解
2019/01/23 PHP
添加到收藏夹代码(兼容几乎所有的浏览器)
2007/01/09 Javascript
jquery HotKeys轻松搞定键盘事件代码
2008/08/30 Javascript
js验证身份证号有效性并提示对应信息
2015/10/19 Javascript
jQuery使用serialize()表单序列化时出现中文乱码问题的解决办法
2016/07/27 Javascript
浅谈jQuery中的eq()与DOM中element.[]的区别
2016/10/28 Javascript
vue2.0多条件搜索组件使用详解
2020/03/26 Javascript
jQuery实现的简单在线计算器功能
2017/05/11 jQuery
Vue下拉框回显并默认选中随机问题
2018/09/06 Javascript
layui 表格操作列按钮动态显示的实现方法
2019/09/06 Javascript
Nodejs文件上传、监听上传进度的代码
2020/03/27 NodeJs
vue开发移动端底部导航条功能
2020/04/08 Javascript
[01:12:53]完美世界DOTA2联赛PWL S2 Forest vs SZ 第一场 11.25
2020/11/26 DOTA
python中多层嵌套列表的拆分方法
2018/07/02 Python
python中pika模块问题的深入探究
2018/10/13 Python
Django框架用户注销功能实现方法分析
2019/05/28 Python
Python使用jpype模块调用jar包过程解析
2020/07/29 Python
日语翻译个人求职的自我评价
2013/10/14 职场文书
导游个人求职信范文
2014/03/23 职场文书
入职担保书怎么写
2014/05/12 职场文书
乡镇党员群众路线教育实践活动对照检查材料思想汇报
2014/10/05 职场文书
庆六一宣传标语
2014/10/08 职场文书
2014年公务员工作总结
2014/11/18 职场文书
教师节座谈会主持词
2015/07/03 职场文书
2016年小学教师政治学习心得体会
2016/01/23 职场文书
numpy数据类型dtype转换实现
2021/04/24 Python
pandas DataFrame.shift()函数的具体使用
2021/05/24 Python
Z-Order加速Hudi大规模数据集方案分析
2022/03/31 Servers