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

这两个事件很常见。
了解这两个事件的区别,但是实际并没有使用到这两个事件的区别去做一些操作。
通常使用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=#>

本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。

jquery实现可拖拽弹出层特效 - 2015-03-11 14:03:03

功能很简单,却非常的实用,代码更加的简洁,这里就不多废话了 奉上源码: 复制代码 代码如下: !DOCTYPE html html xmlns=" http://www.w3.org/1999/xhtml " head meta http-equiv="Content-Type" content="text/html; charset=utf-8" / title/title style type="text/css" * { margin: 0px; padding: 0px; } .dragBox {
直接说问题,在一个页面用了Jquery(1.6)的Ajax请求,用的post,传递显示的数组有500多条.php端却只能接受到50条左右。刚开始以为是web服务器设置的问题,把,max_upload_size这类的都改了。但是没有效果,后来尝试用max_input_vars这个是新玩艺,刚开始还有点作用。后来,客户的数据超过2000的时候,还是一样,php端还是不能完全接受到ajax发送过来的数据。最后,在国外的一网站上,找到了解决方案。 在post发送前,将要发送的变量用JSON.stringify处理
dotNetFlexGrid是一款asp.net原生的异步表格控件,他的前身是Jquery FlexiGrid插件,我们重构了FlexiGrid的大部分Javascript代码,使其工作的更有效率,BUG更少;同时将其封装为dotNet控件,提供了简单易用的使用方式。 dotNetFlexGrid扩展和优化了FlexiGrid原有的功能,并提供了更多具有针对性的功能,使用dotNetFlexGrid,您的用户可以轻松拥有如下功能 提供简易的方式自行调整表格列宽 根据实际情况调整表格的大小 针对合适的列进行
问题原因:/js/transport.js 文件 Object.prototype.toJSONString = function () {**************} 大概 580行到590行之间 这个句用于格式化json,他重写了object的结构,导致于js框架冲突,如果要解决需要把这段代码注释掉,然后用别的方式替换。 我是将所有用到*.toJSONString的地方,替换成一个函数,例如: /js/common.js 29行 Ajax.call(‘flow.php?step=add_to_car
1、将Json字符串转换成JSON对象 var t='{"firstName": "cyra", "lastName": "richardson"}'; var obj = eval('(' + t + ')'); 2、遍历读取键值对 for(var str in obj){ alert(str+'='+obj[str]); }

jquery 通过name快速取值示例 - 2015-03-11 14:03:03

复制代码 代码如下: function getValues_ByName() { var order = []; $("[name=chkbox_id]:checked").each(function () { order.push($(this).val()); }); var values = order.join(','); if (values == "") { alert("选项不能为空!"); return; } else { alert(values); } }
前言 本章我们要讲解的是S.O.L.I.D五大原则JavaScript语言实现的第5篇,依赖倒置原则LSP(The Dependency Inversion Principle )。 英文原文: http://freshbrewedcode.com/derekgreer/2012/01/22/solid-javascript-the-dependency-inversion-principle/ 依赖倒置原则 依赖倒置原则的描述是: A. High-level modules should not dep
JavaScript中,object转换为boolean的操作非常简单:所有的object转换成boolean后均为true;即使是new Boolean(false)这样的object在转换为boolean后仍然为true。 复制代码 代码如下: var x = new Boolean(false); if(x){ console.log("x is true"); } 在将object转换为string或者number时,JavaScript会调用object的两个转换函数:toString()与va

关于js遍历表格的实例 - 2015-03-11 14:03:03

复制代码 代码如下: html headtitle遍历表格/title script language="javascript" function getData() { var arrData=new Array(); var objTable=document.getElementById("myTable"); if(objTable) { for(var i=0;iobjTable.rows.length;i++) { for(var j=0;jobjTable.rows[i].cells.len

JScript分割字符串示例代码 - 2015-03-11 14:03:03

不废话了,直接用代码说明吧: 复制代码 代码如下: try { var ss = new Array(); var str="123,4567,89,0"; ss = str.split(","); // 以逗号为分割符 for(i=0;iss.length;i++) WScript.Echo(ss[i]); } catch(e) { WScript.Echo(e.description); }