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使用手册之三 CSS操作
Mar 24 Javascript
用js遍历 table的脚本
Jul 23 Javascript
extjs grid取到数据而不显示的解决
Dec 29 Javascript
jQuery Autocomplete自动完成插件
Jul 17 Javascript
Javascript基础教程之比较操作符
Jan 18 Javascript
jQuery支持添加事件的日历特效代码分享(3种样式)
Aug 24 Javascript
jquery实现简单的二级导航下拉菜单效果
Sep 07 Javascript
javascript+HTML5 Canvas绘制转盘抽奖
May 16 Javascript
写jQuery插件时的注意点
Feb 20 Javascript
vue移动端监听滚动条高度的实现方法
Sep 03 Javascript
BootstrapValidator验证用户名已存在(ajax)
Nov 08 Javascript
Webpack中SplitChunksPlugin 配置参数详解
Mar 24 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
mysql From_unixtime及UNIX_TIMESTAMP及DATE_FORMAT日期函数
2010/03/21 PHP
php快速url重写更新版[需php 5.30以上]
2010/04/25 PHP
php中取得文件的后缀名?
2012/02/20 PHP
ajax php传递和接收变量实现思路及代码
2012/12/19 PHP
php实现仿写CodeIgniter的购物车类
2015/07/29 PHP
PHP中file_get_contents函数抓取https地址出错的解决方法(两种方法)
2015/09/22 PHP
php提取身份证号码中的生日日期以及验证是否为成年人的函数
2015/09/29 PHP
PHP基于SMTP协议实现邮件发送实例代码
2017/04/27 PHP
用PHP去掉文件头的Unicode签名(BOM)方法
2017/06/22 PHP
Yii2框架视图(View)操作及Layout的使用方法分析
2019/05/27 PHP
node.js中的events.emitter.removeAllListeners方法使用说明
2014/12/10 Javascript
JS控制表单提交的方法
2015/07/09 Javascript
JS给Textarea文本框添加行号的方法
2015/08/20 Javascript
基于JavaScript实现瀑布流布局(二)
2016/01/26 Javascript
checkbox 选中一个另一个checkbox也会选中的实现代码
2016/07/09 Javascript
JavaScript仿聊天室聊天记录
2016/12/27 Javascript
解决vue组件中使用v-for出现告警问题及v for指令介绍
2017/11/11 Javascript
元素全屏的设置与监听实例
2017/11/28 Javascript
Vue项目中设置背景图片方法
2018/02/21 Javascript
[03:40]2014DOTA2国际邀请赛 B神专访:躲箭真的很难
2014/07/13 DOTA
[00:34]TI7不朽珍藏III——纯金地穴编织者饰品展示
2017/07/15 DOTA
python验证码识别教程之灰度处理、二值化、降噪与tesserocr识别
2018/06/04 Python
对pytorch网络层结构的数组化详解
2018/12/08 Python
Python实现把类当做字典来访问
2019/12/16 Python
CSS3中新增的对文本和字体的设置
2020/02/03 HTML / CSS
关于HTML5语义标签的实践(blog页面)
2016/07/12 HTML / CSS
Java Servlet的主要功能和作用是什么
2014/02/14 面试题
单位授权委托书范本
2014/09/26 职场文书
优秀党支部申报材料
2014/12/24 职场文书
农村环境卫生倡议书
2015/04/29 职场文书
2015年小学教导处工作总结
2015/05/26 职场文书
八年级作文之一起的走过日子
2019/09/17 职场文书
导游词之襄阳古城
2019/09/27 职场文书
Django实现翻页的示例代码
2021/05/24 Python
详解vue身份认证管理和租户管理
2021/05/25 Vue.js
详解Vue项目的打包方式(生成dist文件)
2022/01/18 Vue.js