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 相关文章推荐
自适应高度框架 ----属个人收藏内容
Jan 22 Javascript
javascript prototype原型操作笔记
Dec 07 Javascript
jQuery技巧总结
Jan 01 Javascript
Javascript实现真实字符串剩余字数提示的实例代码
Oct 22 Javascript
JavaScript学习笔记整理_简单实现枚举类型,扑克牌应用
Sep 19 Javascript
jQuery实现获取动态添加的标签对象示例
Jun 28 jQuery
node学习笔记之读写文件与开启第一个web服务器操作示例
May 29 Javascript
layer关闭当前窗口页面以及确认取消按钮的方法
Sep 09 Javascript
JavaScript 作用域scope简单汇总
Oct 23 Javascript
小程序怎样让wx.navigateBack更好用的方法实现
Nov 01 Javascript
Jquery异步上传文件代码实例
Nov 13 jQuery
详解JavaScript类型判断的四种方法
Oct 21 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
星际实力自我测试
2020/03/04 星际争霸
php 中英文语言转换类
2011/09/07 PHP
PHP会话控制实例分析
2016/12/24 PHP
PHP 实现 JSON 数据的编码和解码操作详解
2020/04/22 PHP
用javascript实现计算两个日期的间隔天数
2007/08/14 Javascript
JS中获取数据库中的值的方法
2013/07/14 Javascript
JavaScript:Div层拖动效果实例代码
2013/08/06 Javascript
用jquery实现的一个超级简单的下拉菜单
2014/05/18 Javascript
node.js中的url.format方法使用说明
2014/12/10 Javascript
Node.js开发之访问Redis数据库教程
2015/01/14 Javascript
Js与Jq获取浏览器和对象值的方法
2016/03/18 Javascript
jQuery链式调用与show知识浅析
2016/05/11 Javascript
Javascript中关于Array.filter()的妙用详解
2016/12/04 Javascript
利用JQuery实现datatables插件的增加和删除行功能
2017/01/06 Javascript
JS触摸与手势事件详解
2017/05/09 Javascript
JavaScript实现微信号随机切换代码
2018/03/09 Javascript
Vue+Jwt+SpringBoot+Ldap完成登录认证的示例代码
2018/05/21 Javascript
深入浅析angular和vue还有jquery的区别
2018/08/13 jQuery
layui多图上传实现删除功能的例子
2019/09/23 Javascript
VUE中使用HTTP库Axios方法详解
2020/02/05 Javascript
python调用新浪微博API项目实践
2014/07/28 Python
Python实现读取字符串按列分配后按行输出示例
2018/04/17 Python
pandas实现将dataframe满足某一条件的值选出
2019/06/12 Python
python列表,字典,元组简单用法示例
2019/07/11 Python
Django框架序列化与反序列化操作详解
2019/11/01 Python
python tkiner实现 一个小小的图片翻页功能的示例代码
2020/06/24 Python
python 爬取腾讯视频评论的实现步骤
2021/02/18 Python
HTML5教程之html 5 本地数据库(Web Sql Database)
2014/04/03 HTML / CSS
高中自我评价范文
2014/01/27 职场文书
工厂总经理岗位职责
2014/02/07 职场文书
后勤服务中心总经理工作职责
2014/03/03 职场文书
借款担保书范文
2014/05/13 职场文书
授权委托书范文
2014/07/31 职场文书
安全责任书
2015/01/29 职场文书
萤火虫之墓观后感
2015/06/05 职场文书
在Centos 8.0中安装Redis服务器的教程详解
2022/03/21 Redis