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 可拖动列表实现代码
Dec 13 Javascript
使用js对select动态添加和删除OPTION示例代码
Aug 12 Javascript
javascript如何操作HTML下拉列表标签
Aug 20 Javascript
jquery+CSS3模拟Path2.0动画菜单效果代码
Aug 31 Javascript
AngularJS入门心得之directive和controller通信过程
Jan 25 Javascript
jQuery qrcode生成二维码的方法
Apr 03 Javascript
Javascript实现图片懒加载插件的方法
Oct 20 Javascript
jQuery animate()实现背景色渐变效果的处理方法【使用jQuery.color.js插件】
Mar 15 Javascript
Angular.Js之Scope作用域的学习教程
Apr 27 Javascript
js时间戳与日期格式之间相互转换
Dec 11 Javascript
JavaScript显式数据类型转换详解
Mar 18 Javascript
JS深入学习之数组对象排序操作示例
May 01 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代码
2006/12/06 PHP
PHP has encountered an Access Violation 错误的解决方法
2010/01/17 PHP
php中获得视频时间总长度的另一种方法
2011/09/15 PHP
控制PHP的输出:缓存并压缩动态页面
2013/06/11 PHP
php中的PHP_EOL换行符详细解析
2013/10/26 PHP
PHP入门教程之图像处理技巧分析
2016/09/11 PHP
PHP中类与对象功能、用法实例解读
2020/03/27 PHP
看了就知道什么是JSON
2007/12/09 Javascript
Ext.FormPanel 提交和 Ext.Ajax.request 异步提交函数的区别
2009/11/12 Javascript
网页前台通过js非法字符过滤代码(骂人的话等等)
2010/05/26 Javascript
yepnope.js 异步加载资源文件
2011/09/08 Javascript
jquery选择器-根据多个属性选择示例代码
2013/10/21 Javascript
jQuery实现点击文本框弹出热门标签的提示效果
2013/11/17 Javascript
JS实现仿雅虎首页快捷登录入口及导航模块效果
2015/09/19 Javascript
Sort()函数的多种用法
2016/03/20 Javascript
bootstrap网页框架的使用方法
2016/05/10 Javascript
浅谈JavaScript中小数和大整数的精度丢失
2016/05/31 Javascript
js原生跨域_用script标签的简单实现
2016/09/24 Javascript
在使用JSON格式处理数据时应该注意的问题小结
2017/05/20 Javascript
十分钟带你快速了解React16新特性
2017/11/10 Javascript
基于iview的router常用控制方式
2019/05/30 Javascript
jQuery内容选择器与表单选择器实例分析
2019/06/28 jQuery
按日期打印Python的Tornado框架中的日志的方法
2015/05/02 Python
在Python 2.7即将停止支持时,我们为你带来了一份python 3.x迁移指南
2018/01/30 Python
python2 中 unicode 和 str 之间的转换及与python3 str 的区别
2019/07/25 Python
Python3 利用face_recognition实现人脸识别的方法
2020/03/13 Python
如何用Matplotlib 画三维图的示例代码
2020/07/28 Python
如何更换python默认编辑器的背景色
2020/08/10 Python
奥地利领先的在线药房:SHOP APOTHEKE
2019/10/07 全球购物
中秋节礼品促销方案
2014/02/02 职场文书
中等生评语大全
2014/05/04 职场文书
新法人代表任命书
2014/06/06 职场文书
交通工程专业推荐信
2014/09/06 职场文书
2015年乡镇纪检工作总结
2015/04/22 职场文书
2016中秋节广告语
2016/01/28 职场文书
MySQL InnoDB ReplicaSet(副本集)简单介绍
2021/04/24 MySQL