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 中文文档 - ComboBox组合框
Oct 07 Javascript
JavaScript/jQuery 表单美化插件小结
Feb 14 Javascript
js阻止默认事件与js阻止事件冒泡示例分享 js阻止冒泡事件
Jan 27 Javascript
JS通过分析userAgent属性来判断浏览器的类型及版本
Mar 28 Javascript
js+jquery实现图片裁剪功能
Jan 02 Javascript
Jquery判断radio、selelct、checkbox是否选中及获取选中值方法总结
Apr 15 Javascript
利用vue实现模态框组件
Dec 19 Javascript
jQuery基于事件控制实现点击显示内容下拉效果
Mar 07 Javascript
微信小程序实现皮肤功能(夜间模式)
Jun 18 Javascript
angular4自定义表单控件[(ngModel)]的实现
Nov 23 Javascript
说说如何利用 Node.js 代理解决跨域问题
Apr 22 Javascript
JS中this的4种绑定规则详解
Feb 04 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高级OOP技术演示
2009/08/27 PHP
php对csv文件的读取,写入,输出下载操作详解
2013/08/10 PHP
Thinkphp无限级分类代码
2015/11/11 PHP
ThinkPHP表单令牌错误的相关解决方法分析
2016/05/20 PHP
一个简单安全的PHP验证码类、PHP验证码
2016/09/24 PHP
php实现获取农历(阴历)、节日、节气的类与用法示例
2017/11/20 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
2017/12/25 PHP
jquery实现简单的轮换出现效果实例
2015/07/23 Javascript
js拼接html字符串的注意事项
2016/10/13 Javascript
火狐和ie下获取javascript 获取event的方法(推荐)
2016/11/26 Javascript
AngularJS服务service用法总结
2016/12/13 Javascript
Ajax和Comet技术总结
2017/02/19 Javascript
让你5分钟掌握9个JavaScript小技巧
2018/06/09 Javascript
JavaScript创建对象的常用方式总结
2018/08/10 Javascript
Vue表单之v-model绑定下拉列表功能
2019/05/14 Javascript
解决vue+ element ui 表单验证有值但验证失败问题
2020/01/16 Javascript
Python cookbook(数据结构与算法)通过公共键对字典列表排序算法示例
2018/03/15 Python
对python字典元素的添加与修改方法详解
2018/07/06 Python
浅谈python3.6的tkinter运行问题
2019/02/22 Python
详解PyTorch中Tensor的高阶操作
2019/08/18 Python
使用python远程操作linux过程解析
2019/12/04 Python
python 列表、字典和集合的添加和删除操作
2019/12/16 Python
如何基于python实现归一化处理
2020/01/20 Python
使用python实现飞机大战游戏
2020/03/23 Python
如何用python实现一个HTTP连接池
2021/01/14 Python
浅谈移动端网页图片预加载方案
2018/11/05 HTML / CSS
德国网上药房:Apotal
2017/04/04 全球购物
Mamas & Papas沙特阿拉伯:英国最受欢迎的婴儿品牌
2017/11/20 全球购物
室内设计专业学生的自我评价分享
2013/11/27 职场文书
和谐家庭演讲稿
2014/05/24 职场文书
公司年终奖分配方案
2014/06/16 职场文书
党员年终个人总结
2015/02/14 职场文书
2015年城乡环境综合治理工作总结
2015/07/24 职场文书
图书借阅制度范本
2015/08/06 职场文书
《天使的翅膀》读后感3篇
2019/12/20 职场文书
CentOS下安装Jenkins的完整步骤
2022/04/07 Servers