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实例教程(19) 使用HoTMetal(1)
Dec 23 Javascript
jquery radio 操作代码
Mar 16 Javascript
左右悬浮可分组的网站QQ在线客服代码(可谓经典)
Dec 21 Javascript
基于javascript实现动态显示当前系统时间
Jan 28 Javascript
获取input标签的所有属性的方法
Jun 28 Javascript
深入理解JavaScript定时机制
Oct 27 Javascript
javascript中活灵活现的Array对象详解
Nov 30 Javascript
BootStrap CSS全局样式和表格样式源码解析
Jan 20 Javascript
AngularJS中的拦截器实例详解
Apr 07 Javascript
BootStrap导航栏问题记录
Jul 31 Javascript
element ui table 增加筛选的方法示例
Nov 02 Javascript
js实现贪吃蛇小游戏
Oct 29 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
怎样在UNIX系统下安装MySQL
2006/10/09 PHP
PHP与SQL注入攻击防范小技巧
2011/09/16 PHP
php中有关字符串的4个函数substr、strrchr、strstr、ereg介绍和使用例子
2014/04/24 PHP
PHP模块memcached使用指南
2014/12/08 PHP
CentOS下PHP安装Oracle扩展
2015/02/15 PHP
PHP实现数组array转换成xml的方法
2016/07/19 PHP
User Scripts: Video Download by User Scripts
2007/05/14 Javascript
基于jquery的跟随屏幕滚动代码
2012/07/24 Javascript
node在两个div之间移动,用ztree实现
2013/03/06 Javascript
js string 转 int 注意的问题小结
2013/08/15 Javascript
javascript自然分类法算法实现代码
2013/10/11 Javascript
Checbox的操作含已选、未选及判断代码
2013/11/07 Javascript
javascript创建createXmlHttpRequest对象示例代码
2014/02/10 Javascript
Javascript动态引用CSS文件的2种方法介绍
2014/06/06 Javascript
AngularJS基础学习笔记之指令
2015/05/10 Javascript
用JavaScript判断CSS浏览器类型前缀的两种方法
2015/10/08 Javascript
ES6的新特性概览
2016/03/10 Javascript
window.close(); 关闭浏览器窗口js代码的总结介绍
2016/07/14 Javascript
Vue响应式原理深入解析及注意事项
2017/12/11 Javascript
vue2.0 computed 计算list循环后累加值的实例
2018/03/07 Javascript
vue组件之间数据传递的方法实例分析
2019/02/12 Javascript
node实现爬虫的几种简易方式
2019/08/22 Javascript
vue使用prop可以渲染但是打印台报错的解决方式
2019/11/13 Javascript
[02:12]2019完美世界全国高校联赛(春季赛)报名开启
2019/03/01 DOTA
Python的Flask框架中使用Flask-SQLAlchemy管理数据库的教程
2016/06/14 Python
python编程实现希尔排序
2017/04/13 Python
基于Python socket的端口扫描程序实例代码
2018/02/09 Python
Tensorflow分批量读取数据教程
2020/02/07 Python
梅西百货澳大利亚:Macy’s Australia
2017/07/26 全球购物
Hotels.com台湾:饭店订房网
2017/09/06 全球购物
越南电子产品购物网站:FPT Shop
2017/12/02 全球购物
村当支部个人对照检查材料思想汇报
2014/10/06 职场文书
销售督导岗位职责
2015/04/10 职场文书
2015年中学图书馆工作总结
2015/07/22 职场文书
vue-cropper插件实现图片截取上传组件封装
2021/05/27 Vue.js
苹果可能正在打击不进行更新的 App
2022/04/24 数码科技