js函数中onmousedown和onclick的区别和联系探讨


Posted in Javascript onMay 19, 2013

这两个事件很常见。
了解这两个事件的区别,但是实际并没有使用到这两个事件的区别去做一些操作。
通常使用onclick的时候也可以使用onmousedown,使用onclick的时候更多一些。
今天碰到了非使用onmousedown不可的时候,故特此记录。

先说一下区别:onclick是在鼠标点击弹起之后触发的事件。onmousedown是在鼠标按下之后触发的事件。
简单的说onclick = onmousedown + onmouseup;
如果在某个地方按下鼠标后移开鼠标在另外一个地方松开鼠标会触发onmousedown事件,但是onclick事件却不会被触发。
我们今天要实现的功能是点击a标签,切换到另外一个页面,在原页面关闭之前需要触发一个函数。不是windowunload。
之前使用的是onclick事件,IE中测试无问题,但是在FF中测试发现,在页面被销毁之前还没有来得及执行这个函数。
如果使用onmousedown事件,虽然也没有办法保证该函数一定被执行,但是为该函数的执行争取了一定的时间,因为跳转是在鼠标弹起之后执行的。

解决办法一:onclick="return test()",当且仅当当该函数返回true之后才执行跳转。这样导致了一个新的问题。如果我们在test函数中执行了多线程程序或者新开线程的程序后,会先返回true,跳转,新开的线程就没有被执行。如下面的函数:

function test() 
{ 
(new Image()).src="1.html"; 
window.open("1.html","_new"); 
//alert("ok"); 
return true; 
}

我在1.html文件中设置了<body onload="javascript:alert('ok')">,当1.html并没有被完全渲染结束时,跳转已经执行了。new image函数也没有保证已经被执行了。
在使用单一线程执行函数时,可使用return test()这种方法。

解决办法二:估计一下test函数的多线程函数的最长执行速度,加入执行时间为100.不在a标签中使用跳转。在test函数中使用setTimeout(location.href="1.html",100)来执行跳转。

Javascript 相关文章推荐
javascript onkeydown,onkeyup,onkeypress,onclick,ondblclick
Feb 04 Javascript
IE8 chrome中table隔行换色解决办法
Jul 09 Javascript
javascript五图轮播切换实用版
Aug 17 Javascript
JavaScript高级程序设计(第3版)学习笔记3 js简单数据类型
Oct 11 Javascript
javascript之Partial Application学习
Jan 10 Javascript
AngularJS压缩JS技巧分析
Nov 08 Javascript
聊聊那些使用前端Javascript实现的机器学习类库
Sep 18 Javascript
React Native预设占位placeholder的使用
Sep 28 Javascript
对vue中methods互相调用的方法详解
Aug 30 Javascript
移动端自适应flexible.js的使用方法(不用三大框架,仅写一个单html页面使用)推荐
Apr 02 Javascript
详解服务端预渲染之Nuxt(介绍篇)
Apr 07 Javascript
详解使用WebPack搭建React开发环境
Aug 06 Javascript
下拉菜单点击实现连接跳转功能的js代码
May 19 #Javascript
js操纵跨frame的三级联动select下拉选项实例介绍
May 19 #Javascript
固定背景实现的背景滚动特效示例分享
May 19 #Javascript
Jquery实现鼠标移上弹出提示框、移出消失思路及代码
May 19 #Javascript
扩展js对象数组的OrderByAsc和OrderByDesc方法实现思路
May 17 #Javascript
js获取元素到文档区域document的(横向、纵向)坐标的两种方法
May 17 #Javascript
javascript解决innerText浏览器兼容问题思路代码
May 17 #Javascript
You might like
PHP字符编码问题之GB2312 VS UTF-8解决方法
2011/06/23 PHP
linux系统下php安装mbstring扩展的二种方法
2014/01/20 PHP
PHP 抽象方法与抽象类abstract关键字介绍及应用
2014/10/16 PHP
php实现字符串翻转的方法
2015/03/27 PHP
yii2利用自带UploadedFile实现上传图片的示例
2017/02/16 PHP
JavaScript去除空格的几种方法
2006/10/03 Javascript
兼容IE/Firefox/Opera/Safari的检测页面装载完毕的脚本Ext.onReady的实现
2009/07/14 Javascript
jquery之empty()与remove()区别说明
2010/09/10 Javascript
js新闻滚动 js如何实现新闻滚动效果
2013/01/07 Javascript
js用Date对象处理时间实现思路及代码
2013/01/31 Javascript
jquery动态改变onclick属性导致失效的问题解决方法
2013/12/04 Javascript
js 弹出新页面避免被浏览器、ad拦截的一种新方法
2014/04/30 Javascript
Js实现滚动变色的文字效果
2014/06/16 Javascript
javascript学习笔记(二)数组和对象部分
2014/09/30 Javascript
详细谈谈AngularJS的子级作用域问题
2016/09/05 Javascript
vue+webpack dev本地调试全局样式引用失效的解决方案
2019/11/12 Javascript
RxJS在TypeScript中的简单使用详解
2020/04/13 Javascript
addEventListener()和removeEventListener()追加事件和删除追加事件
2020/12/04 Javascript
Python探索之SocketServer详解
2017/10/28 Python
Python自动化测试笔试面试题精选
2020/03/12 Python
Python + opencv对拍照得到的图片进行背景去除的实现方法
2020/11/18 Python
如何用用Python将地址标记在地图上
2021/02/07 Python
让IE下支持Html5的placeholder属性的插件
2014/09/02 HTML / CSS
美国知名的摄影器材销售网站:Adorama
2017/02/01 全球购物
软件生产职位结构化面试主要考察要素及面试题库
2015/06/12 面试题
自我鉴定书范文
2013/10/02 职场文书
教师岗位职责范本
2013/12/29 职场文书
大学校园毕业自我鉴定
2014/01/15 职场文书
房屋买卖委托公证书
2014/04/08 职场文书
节能宣传周活动总结
2014/05/08 职场文书
优秀党员学习焦裕禄精神思想汇报范文
2014/09/10 职场文书
入党申请书怎么写?
2019/06/21 职场文书
2019年教师节:送给所有老师的祝福语
2019/09/05 职场文书
导游词之南京莫愁湖公园
2019/11/13 职场文书
一文读懂navicat for mysql基础知识
2021/05/31 MySQL
Python使用pandas导入csv文件内容的示例代码
2022/12/24 Python