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的event详解。
Sep 06 Javascript
Javascript document.referrer判断访客来源网址
May 15 Javascript
HTML中的setCapture和releaseCapture使用介绍
Mar 21 Javascript
利用jquery动画特效和css打造的侧边弹出垂直导航
Apr 04 Javascript
js/jquery判断浏览器类型的方法小结
May 12 Javascript
Angularjs 滚动加载更多数据
Mar 17 Javascript
Bootstrap复选框和单选按钮美化插件(推荐)
Nov 23 Javascript
Bootstrap源码解读模态弹出框(11)
Dec 28 Javascript
JavaScript输出所选择起始与结束日期的方法
Jul 12 Javascript
Postman模拟发送带token的请求方法
Mar 31 Javascript
angular 服务的单例模式(依赖注入模式下)详解
Oct 22 Javascript
JavaScript格式化json和xml的方法示例
Jan 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
destoon实现底部添加你是第几位访问者的方法
2014/07/15 PHP
php显示时间常用方法小结
2015/06/05 PHP
利用PHP脚本在Linux下用md5函数加密字符串的方法
2015/06/29 PHP
javascript Base类 包含基本的方法
2009/07/22 Javascript
JavaScript 以对象为索引的关联数组
2010/05/19 Javascript
一些javascript一些题目的解析
2010/12/25 Javascript
JavaScript Ajax Json实现上下级下拉框联动效果实例代码
2013/11/23 Javascript
js 采用delete实现继承示例代码
2014/05/20 Javascript
JavaScript 实现打印,打印预览,打印设置
2014/12/30 Javascript
jQuery实现鼠标经过时出现隐藏层文字链接的方法
2015/10/12 Javascript
基于JavaScript实现类似于百度学术高级检索功能
2016/03/02 Javascript
基于javascript实现图片滑动效果
2016/05/07 Javascript
JS简单封装的图片无缝滚动效果示例【测试可用】
2017/03/22 Javascript
支付宝小程序tabbar底部导航
2018/11/06 Javascript
深入理解Vue keep-alive及实践总结
2019/08/21 Javascript
在webstorm中配置less的方法详解
2020/09/25 Javascript
原生JS实现音乐播放器的示例代码
2021/02/25 Javascript
[52:03]Secret vs VG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
Python装饰器使用示例及实际应用例子
2015/03/06 Python
Python与R语言的简要对比
2017/11/14 Python
pandas数值计算与排序方法
2018/04/12 Python
python中的句柄操作的方法示例
2019/06/20 Python
安装docker-compose的两种最简方法
2019/07/30 Python
python单向循环链表原理与实现方法示例
2019/12/03 Python
JAVA和C++的区别
2013/10/06 面试题
PPP协议组成及简述协议协商的基本过程
2015/05/28 面试题
临床医学系毕业生推荐信
2013/11/09 职场文书
cf收人广告词大全
2014/03/14 职场文书
中秋节活动总结
2014/08/29 职场文书
2014年民警工作总结
2014/11/25 职场文书
2015毕业生实习期工作总结
2015/04/09 职场文书
2015年小学图书室工作总结
2015/05/18 职场文书
《地震中的父与子》教学反思
2016/02/16 职场文书
教你使用pyinstaller打包Python教程
2021/05/27 Python
MySQL多表查询机制
2022/03/17 MySQL
openstack云计算keystone组件工作介绍
2022/04/20 Servers