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 相关文章推荐
window.open不被拦截的实现代码
Aug 22 Javascript
jQuery中wrapAll()方法用法实例
Jan 16 Javascript
javascript递归回溯法解八皇后问题
Apr 22 Javascript
详解AngularJS中的表达式使用
Jun 16 Javascript
jQuery图片瀑布流的简单实现代码
Mar 15 Javascript
基于Swiper实现移动端页面图片轮播效果
Dec 28 Javascript
element-ui表格合并span-method的实现方法
May 21 Javascript
Js通过AES加密后PHP用Openssl解密的方法
Jul 12 Javascript
JS使用H5实现图片预览功能
Sep 30 Javascript
微信小程序实现录制、试听、上传音频功能(带波形图)
Feb 27 Javascript
如何优雅地取消 JavaScript 异步任务
Mar 22 Javascript
微信小程序实现打卡签到页面
Sep 21 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遍历文件夹与子目录的函数代码
2011/09/26 PHP
php登陆页的密码处理方式分享
2013/10/14 PHP
PHP实现的MongoDB数据库操作类分享
2014/05/12 PHP
PHP实现向关联数组指定的Key之前插入元素的方法
2017/06/06 PHP
php 读写json文件及修改json的方法
2018/03/07 PHP
用JavaScrpt实现文件夹简单轻松加密的实现方法图文
2008/09/08 Javascript
JSONP 跨域访问代理API-yahooapis实现代码
2012/12/02 Javascript
JavaScript中的acos()方法使用详解
2015/06/14 Javascript
轻量级jQuery插件slideBox实现带底栏轮播(焦点图)代码
2016/03/28 Javascript
基于javascript实现数字英文验证码
2017/01/25 Javascript
jQuery自定义图片上传插件实例代码
2017/04/04 jQuery
BootstrapTable加载按钮功能实例代码详解
2017/09/22 Javascript
Angular4的输入属性与输出属性实例详解
2017/11/29 Javascript
NW.js 简介与使用方法
2018/02/01 Javascript
element-ui使用导航栏跳转路由的用法详解
2018/08/22 Javascript
修改vue源码实现动态路由缓存的方法
2020/01/21 Javascript
解决vue.js中settimeout遇到的问题(时间参数短效果不稳定)
2020/07/21 Javascript
[01:41]DOTA2超级联赛专访YYF 称一辈子难忘TI2
2013/05/28 DOTA
[15:07]lgd_OG_m2_BP
2019/09/10 DOTA
python实现代码行数统计示例分享
2014/02/10 Python
Python网络爬虫与信息提取(实例讲解)
2017/08/29 Python
python中plot实现即时数据动态显示方法
2018/06/22 Python
Python实现提取XML内容并保存到Excel中的方法
2018/09/01 Python
django之对FileField字段的upload_to的设定方法
2019/07/28 Python
使用OpCode绕过Python沙箱的方法详解
2019/09/03 Python
Python3爬虫关于代理池的维护详解
2020/07/30 Python
python的flask框架难学吗
2020/07/31 Python
用Python 执行cmd命令
2020/12/18 Python
银行柜员应聘推荐信范文
2013/11/24 职场文书
中学生期中自我鉴定
2014/04/20 职场文书
运动会开幕式致辞
2015/07/29 职场文书
mysql 如何获取两个集合的交集/差集/并集
2021/06/08 MySQL
Python实现学生管理系统并生成exe可执行文件详解流程
2022/01/22 Python
企业开发CSS命名BEM代码规范实践
2022/02/12 HTML / CSS
nginx rewrite功能使用场景分析
2022/05/30 Servers
HTML5中的DOCUMENT.VISIBILITYSTATE属性详解
2023/05/07 HTML / CSS