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 API 中文文档 - NumberSpinner数值微调器使用介绍
Oct 21 Javascript
MooBox 基于Mootools的对话框插件
Jan 20 Javascript
浅析Js中的单引号与双引号问题
Nov 06 Javascript
Javascript快速排序算法详解
Dec 03 Javascript
仿JQuery输写高效JSLite代码的一些技巧
Jan 13 Javascript
使用npm发布Node.JS程序包教程
Mar 02 Javascript
JavaScript 动态加载脚本和样式的方法
Apr 13 Javascript
浅析jQuery Mobile的初始化事件
Dec 03 Javascript
基于ES6作用域和解构赋值详解
Nov 03 Javascript
Servlet3.0与纯javascript通过Ajax交互的实例详解
Mar 18 Javascript
深入分析jQuery.one() 函数
Jun 03 jQuery
微信小程序 scroll-view的使用案例代码详解
Jun 11 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定时自动生成静态HTML的实现代码
2010/06/20 PHP
QQ登录 PHP OAuth示例代码
2011/07/20 PHP
php类声明和php类使用方法示例分享
2014/03/29 PHP
JS Pro-深入面向对象的程序设计之继承的详解
2013/05/07 Javascript
jQuery让控件左右移动的三种实现方法
2013/09/08 Javascript
jquery+CSS3模拟Path2.0动画菜单效果代码
2015/08/31 Javascript
jQuery实现点击按钮弹出可关闭层的浮动层插件
2015/09/19 Javascript
分享我对JS插件开发的一些感想和心得
2016/02/04 Javascript
Node.js的Web模板引擎ejs的入门使用教程
2016/06/06 Javascript
AngularJs验证重复密码的方法(两种)
2016/11/25 Javascript
详解 vue better-scroll滚动插件排坑
2018/02/08 Javascript
Vue一次性简洁明了引入所有公共组件的方法
2018/11/28 Javascript
浅谈Vue 性能优化之深挖数组
2018/12/11 Javascript
简单了解node npm cnpm的具体使用方法
2019/02/27 Javascript
微信小程序云开发之使用云存储
2019/05/17 Javascript
详解ECMAScript2019/ES10新属性
2019/12/06 Javascript
简述Vue中容易被忽视的知识点
2019/12/09 Javascript
JavaScript枚举选择jquery插件代码实例
2020/11/17 jQuery
python字符串加密解密的三种方法分享(base64 win32com)
2014/01/19 Python
Python操作列表之List.insert()方法的使用
2015/05/20 Python
利用Python代码实现数据可视化的5种方法详解
2018/03/25 Python
Python cv2 图像自适应灰度直方图均衡化处理方法
2018/12/07 Python
Python编程图形库之Pillow使用方法讲解
2018/12/28 Python
Python通用函数实现数组计算的方法
2019/06/13 Python
Python入门Anaconda和Pycharm的安装和配置详解
2019/07/16 Python
python 实现兔子生兔子示例
2019/11/21 Python
Spring实战之使用util:命名空间简化配置操作示例
2019/12/09 Python
在python下实现word2vec词向量训练与加载实例
2020/06/09 Python
pytorch下的unsqueeze和squeeze的用法说明
2021/02/06 Python
加拿大购物频道:The Shopping Channel
2016/07/21 全球购物
美国百货齐全的精品网站,提供美式风格的产品:Overstock.com
2016/07/22 全球购物
新锐科技Java程序员面试题
2016/07/25 面试题
电信专业毕业生推荐信
2013/11/18 职场文书
后勤管理员岗位职责
2014/08/27 职场文书
2015年基层党支部工作总结
2015/05/21 职场文书
校长新学期寄语2016
2015/12/04 职场文书