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 相关文章推荐
区分JS中的undefined,null,&quot;&quot;,0和false
Mar 08 Javascript
Js切换功能的简单方法
Nov 23 Javascript
JavaScript动态改变HTML页面元素例如添加或删除
Aug 10 Javascript
JQuery判断radio(单选框)是否选中和获取选中值方法总结
Apr 15 Javascript
JavaScript中Number.MIN_VALUE属性的使用示例
Jun 04 Javascript
jQuery mobile 移动web(6)
Dec 20 Javascript
JS实现数字格式千分位相互转换方法
Aug 01 Javascript
深入理解Node.js的HTTP模块
Oct 12 Javascript
简单谈谈JS中的正则表达式
Sep 11 Javascript
ios中视频的最后一桢问题解决
May 14 Javascript
Vue动态面包屑功能的实现方法
Jul 01 Javascript
关于JS模块化的知识点分享
Oct 16 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 中的4种标记风格介绍
2012/05/10 PHP
php实现购物车功能(以大苹果购物网为例)
2017/03/09 PHP
jquery中ajax学习笔记3
2011/10/16 Javascript
javascript实现信息的显示和隐藏如注册页面
2013/12/03 Javascript
javascript浏览器兼容教程之事件处理
2014/06/09 Javascript
教你如何在 Javascript 文件里使用 .Net MVC Razor 语法
2014/07/23 Javascript
jQuery图片特效插件Revealing实现拉伸放大
2015/04/22 Javascript
详细探究ES6之Proxy代理
2016/07/22 Javascript
jQuery实现鼠标跟随效果
2017/02/20 Javascript
jQuery日期范围选择器附源码下载
2017/05/23 jQuery
Angular中的$watch方法详解
2017/09/18 Javascript
element-ui表格数据转换的示例代码
2018/08/24 Javascript
vue实现购物车小案例
2019/09/27 Javascript
JS实现的进制转换,浮点数相加,数字判断操作示例
2019/11/09 Javascript
js实现圆形显示鼠标单击位置
2020/02/11 Javascript
js实现小时钟效果
2020/03/25 Javascript
Python编程中字符串和列表的基本知识讲解
2015/10/14 Python
从零开始学Python第八周:详解网络编程基础(socket)
2016/12/14 Python
python实现Floyd算法
2018/01/03 Python
python SSH模块登录,远程机执行shell命令实例解析
2018/01/12 Python
Python基于mysql实现学生管理系统
2019/02/21 Python
Python pandas DataFrame操作的实现代码
2019/06/21 Python
python3.6 如何将list存入txt后再读出list的方法
2019/07/02 Python
Python 列表的清空方式
2020/01/13 Python
python使用numpy实现直方图反向投影示例
2020/01/17 Python
PythonPC客户端自动化实现原理(pywinauto)
2020/05/28 Python
意大利综合购物网站:Giordano Shop
2016/10/21 全球购物
党的群众路线学习笔记
2014/11/06 职场文书
保安2014年终工作总结
2014/12/06 职场文书
先进教师个人事迹材料
2014/12/15 职场文书
2015年社区环境卫生工作总结
2015/04/21 职场文书
六一活动主持词
2015/06/30 职场文书
创业计划书之密室逃脱
2019/11/08 职场文书
Mysql 如何批量插入数据
2021/04/06 MySQL
redis实现共同好友的思路详解
2021/05/26 Redis
Python学习开发之图形用户界面详解
2021/08/23 Python