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 相关文章推荐
用JavaScript玩转游戏物理(一)运动学模拟与粒子系统
Jun 19 Javascript
javascript检测浏览器flash版本的实现代码
Dec 06 Javascript
javascript之querySelector和querySelectorAll使用介绍
Dec 20 Javascript
Javascript快速排序算法详解
Dec 03 Javascript
JQuery.get提交页面不跳转的解决方法
Jan 13 Javascript
javascript动态设置样式style实例分析
May 13 Javascript
javascript实现列表切换效果
May 02 Javascript
JS插件plupload.js实现多图上传并显示进度条
Nov 29 Javascript
Vue进度条progressbar组件功能
Apr 17 Javascript
详解如何在Vue里建立长按指令
Aug 20 Javascript
JQuery实现ul中添加LI和删除指定的Li元素功能完整示例
Oct 16 jQuery
js实现视图和数据双向绑定的方法分析
Feb 05 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/05 PHP
MYSQL 小技巧 -- LAST_INSERT_ID
2009/11/24 PHP
php自动识别文字编码并转换为目标编码的方法
2015/08/08 PHP
WordPress的主题编写中获取头部模板和底部模板
2015/12/28 PHP
PHP简单检测网址是否能够正常打开的方法
2016/09/04 PHP
PHP基于SimpleXML生成和解析xml的方法示例
2017/07/17 PHP
php简单读取.vcf格式文件的方法示例
2017/09/02 PHP
JavaScript Sort 的一个错误用法示例
2015/03/20 Javascript
jQuery插件FusionCharts实现的MSBar3D图效果示例【附demo源码】
2017/03/23 jQuery
JavaScript中使用webuploader实现上传视频功能(demo)
2017/04/10 Javascript
详解vue-cli 构建Vue项目遇到的坑
2017/08/30 Javascript
Vue学习笔记之表单输入控件绑定
2017/09/05 Javascript
jQuery与vue实现拖动验证码功能
2018/01/30 jQuery
Vue2.0实现组件数据的双向绑定问题
2018/03/06 Javascript
Angular2进阶之如何避免Dom误区
2018/04/02 Javascript
electron实现qq快捷登录的方法示例
2018/10/22 Javascript
利用hasOwnProperty给数组去重的面试题分享
2018/11/05 Javascript
微信小程序地图实现展示线路
2020/07/29 Javascript
vue实现折线图 可按时间查询
2020/08/21 Javascript
vue中解决微信html5原生ios虚拟键返回不刷新问题
2020/10/20 Javascript
Python中json格式数据的编码与解码方法详解
2016/07/01 Python
Python3 操作符重载方法示例
2017/11/23 Python
解决py2exe打包后,总是多显示一个DOS黑色窗口的问题
2019/06/21 Python
Python使用Beautiful Soup爬取豆瓣音乐排行榜过程解析
2019/08/15 Python
Python 函数list&amp;read&amp;seek详解
2019/08/28 Python
python3实现单目标粒子群算法
2019/11/14 Python
Python中如何引入第三方模块
2020/05/27 Python
Keras: model实现固定部分layer,训练部分layer操作
2020/06/28 Python
python爬取代理IP并进行有效的IP测试实现
2020/10/09 Python
怎么解决pycharm license Acti的方法
2020/10/28 Python
一款纯css3实现简单的checkbox复选框和radio单选框
2014/11/05 HTML / CSS
英国电子产品购物网站:TobyDeals
2018/07/30 全球购物
考博自荐信
2013/10/25 职场文书
教师党性分析材料
2014/02/04 职场文书
材料化学专业求职信
2014/07/15 职场文书
2015年体育教师个人工作总结
2015/05/12 职场文书