CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Web 开发 >  JavaScript

请问如何暂时屏蔽掉鼠标左键的单击

楼主netstarry(等待流星)2002-10-10 23:00:02 在 Web 开发 / JavaScript 提问

有一个用<a   href="#"   onclick="">方式激活的函数,因为该函数处理时间比较长,大概半秒左右,如果连续点击该链接就会出现该函数的连续执行,会消耗大量的时间,而实际只有最后一次的点击有用,有什么方法能够在第一次点击后函数执行中屏蔽掉以后的点击,直到该函数执行完,谢了! 问题点数:100、回复次数:23Top

1 楼net_lover(【孟子E章】)回复于 2002-10-10 23:06:17 得分 0

<a   href="#"   mxh="0"   onclick="if(this.mxh=='0')   youFun();ifthis.mxh='1'">  
  在youFun()执行完后把mxh='0'即可Top

2 楼bencalie(Bencalie)回复于 2002-10-10 23:18:54 得分 0

<a   href="#"   onclick="alert();setTimeout('a1.releaseCapture()',500);a1.setCapture();">123</a>  
  <a   id=a1>123</a>Top

3 楼bencalie(Bencalie)回复于 2002-10-10 23:20:39 得分 0

当然你也可以在你要执行函数最后加上释放鼠标事件的抓取Top

4 楼net_lover(【孟子E章】)回复于 2002-10-10 23:23:44 得分 50

<a   href=""   mxh="0"   onclick="if(this.mxh=='0'){this.mxh='1';youFun(this);};return   false">xcvxcv</a>  
  <script>  
  function   youFun(a)  
  {  
  alert("I   am   running")  
  xxx()  
  a.mxh='0'  
  }  
  function   xxx()  
  {  
  for(i=0;i<1000000;i++)  
  {  
  a=i  
  }  
  }  
  </script>  
  在youFun()执行完后把mxh='0'即可Top

5 楼netstarry(等待流星)回复于 2002-10-11 18:04:06 得分 0

我用了   net_lover(孟子E章)   的思想,因为是多个链接调用同一个函数,所以我使用了document.flag变量代替mxh,具体实现如下  
  <script.....>  
  document.flag=0;  
  </sc..>  
   
  <a   href=#   onclick="if(document.flag==0){document.flag=1;myfun();document.flag=0;};return   false">  
   
   
  这样虽然避免了多次快速点击产生的停顿(注:停顿现象是这样的,当快速点击时,中间的点击调用的函数产生的效果并不会显示,但是会消耗时间,只有最后一次点击的效果才会显示出来,感觉就像停顿),但是中间点击产生的效果会依次显示,并占用时间,也就是说中间的点击并没有取消函数的调用,有没有办法能真正取消中间的点击对函数的调用,谢了。  
   
    bencalie(Bencalie)   的方法没试,因为我要处理的不是单一的链接,而是几个链接。  
  Top

6 楼bencalie(Bencalie)回复于 2002-10-11 19:14:32 得分 0

你可以使用attachEvent方法将我给的代码setTimeout('a1.releaseCapture()',500);a1.setCapture();附加到每个链接的onclick事件中,如果在指定时间内想取消鼠标的抓取,使用右键即可,否则将不等到setTimeout时间到了自动取消抓取,就根本无法对当前窗口进行任何操作。应为弹出对话框和滚动窗口来取消鼠标抓取都无法做到。Top

7 楼netstarry(等待流星)回复于 2002-10-11 20:37:54 得分 0

to     bencalie(Bencalie)    
  据个例子吧,我对javascript不熟,不会用attachEventTop

8 楼goldenlove(潇洒.net)回复于 2002-10-11 20:54:40 得分 0

<script>  
  function   st(obj){obj.onclick=new   Function('return   false')}  
  function   rst(obj){obj.onclick=new   Function('alert("ok!   i\'m   back!")')}  
  </script>  
   
  <a   href=#   onclick=alert('fine')>   link   </a><br>  
  <a   href=#   onclick=alert('link_disabled'),st(document.all.tags("A")[0])>   disabled   </a><br>  
  <a   href=#   onclick=alert('link_enabled'),rst(document.all.tags("A")[0])>   enabled   </a>  
   
  Top

9 楼bencalie(Bencalie)回复于 2002-10-11 21:12:42 得分 0

为了让你看出效果,我改成两秒的,无论多少链接都可以。这是定时的,你也可以把document.body.releaseCapture()放在你要执行的函数结尾  
   
  <body>  
  <a   href="#"   onclick="alert();">123</a>  
  <script>  
  for(i=0;i<document.all.tags("A").length;i++)  
  document.all.tags("A")[i].attachEvent("onclick",setCap)  
  function   setCap(){  
  setTimeout('document.body.releaseCapture()',2000);  
  document.body.setCapture();  
  }  
  </script>Top

10 楼netstarry(等待流星)回复于 2002-10-11 21:20:43 得分 0

to     goldenlove(潇洒.net)    
  我不是要改变整个页面的<a>标签的onclick所执行的函数,只是一部分,而且每个链接执行的函数的参数是不一样的Top

11 楼goldenlove(潇洒.net)回复于 2002-10-11 22:16:55 得分 0

晕倒~~~~~~   你就不晓得自己变通一下   ?    
  一定要别人给你写现成的?  
   
  我只是告诉你一种实现的方法,   具体要实现成什么样,得靠你自己.  
  ---呵...   给人鱼不如给人网.希望你能学会用"网"....   :)Top

12 楼netstarry(等待流星)回复于 2002-10-11 22:31:34 得分 0

to     goldenlove(潇洒.net)  
  我是在说你的方法不行,你的方法使得每个a标签的onclick都执行相同的函数,包括参数,但是我要做的是每个a标签的onclick执行的函数参数是不同的,这样你的方法就不能工作了  
   
  bencalie(Bencalie)的方法好像也存在同样的问题,就是要求每个a标签的onclik方法执行相同的函数,包括参数Top

13 楼bencalie(Bencalie)回复于 2002-10-11 22:39:39 得分 20

晕,没试试不要乱讲  
   
  <body>  
  <a   href="#"   onclick="alert();">123</a>  
  <a   href="#"   onclick="confirm('123');">123</a>  
  <script>  
  for(i=0;i<document.all.tags("A").length;i++)  
  document.all.tags("A")[i].attachEvent("onclick",setCap)  
  function   setCap(){  
  setTimeout('document.body.releaseCapture()',2000);  
  document.body.setCapture();  
  }  
  </script>Top

14 楼goldenlove(潇洒.net)回复于 2002-10-11 22:56:16 得分 0

服了你了......   还非得要我把鱼噻到你嘴里你才吃啊   !?!...  
   
  <a   href=#   onclick=alert('fine'),st(this)>   link   </a><br>  
  <a   href=#   onclick=alert('link_disabled')>   disabled   </a><br>  
  <a   href=#   onclick=alert('link_enabled')>   enabled   </a>  
   
  <script>  
  var   k=new   Array();  
  for(i=0;i<document.all.tags("A").length;i++)  
  k[i]=document.all.tags("A")[i].onclick  
   
  function   st(obj){obj.onclick=new   Function('return   false'),   setTimeout('rst()',2000);}  
  function   rst(){for(i=0;i<document.all.tags("A").length;i++)   document.all.tags("A")[i].onclick=k[i];}  
  </script>Top

15 楼bencalie(Bencalie)回复于 2002-10-11 23:01:49 得分 0

goldenlove(潇洒.net),一起撤退,我们败了,呵呵Top

16 楼goldenlove(潇洒.net)回复于 2002-10-11 23:06:58 得分 20

嘿嘿..   最终版.   不但可以每个连接都能设置不同的   function.  
  现在连停止的秒数都可以自定义了.   每个连接的停顿时间都不一样.   ^_^  
   
   
  <a   href=#   onclick=alert('fine'),st(this,2)>   link   </a><br>  
  <a   href=#   onclick=alert('link_disabled'),st(this,4)>   disabled   </a><br>  
  <a   href=#   onclick=alert('link_enabled'),st(this,10)>   enabled   </a>  
   
  <script>  
  var   k=new   Array(),obj=document.all.tags("A");  
  for(i=0;i<obj.length;i++)  
  k[i]=obj[i].onclick  
  function   st(obj,wt){obj.onclick=new   Function('return   false'),alert('wait   '+wt+'   秒!'),   setTimeout('rst()',wt*1000);}  
  function   rst(){for(i=0;i<obj.length;i++)   obj[i].onclick=k[i];}  
  </script>Top

17 楼netstarry(等待流星)回复于 2002-10-11 23:08:52 得分 0

bencalie(Bencalie)    
   
  方法基本可以使用  
  能不能不用定时,而在我的函数执行完就恢复捕捉?  
  我试了   将function   setCap(){  
  setTimeout('document.body.releaseCapture()',2000);  
  document.body.setCapture();  
  }  
  改为  
  function   setCap(){  
  document.body.releaseCapture();  
  }  
  将document.body.setCapture();放在我的函数为末尾,不行  
   
  将document.body.releaseCapture();放在函数开头  
  将document.body.setCapture();放在函数末尾  
  将出现不点击右键不能开启捕捉的情况  
   
  只能使用定时吗?Top

18 楼netstarry(等待流星)回复于 2002-10-11 23:32:40 得分 0

写反了  
   
  这样处理后  
  document.body.releaseCapture();放在函数末尾  
  出现不点击右键不能开启捕捉的情况  
  //这段代码放在了页面的最后  
  <script>  
  for(i=0;i<document.all.tags("A").length;i++)  
  document.all.tags("A")[i].attachEvent("onclick",setCap)  
  function   setCap(){  
  document.body.setCapture();  
  }  
  </script>Top

19 楼bencalie(Bencalie)回复于 2002-10-11 23:36:25 得分 0

<body>  
  <a   href="#"   onclick="fun1()">123</a><input   id=a1>  
  <script>  
  for(i=0;i<document.all.tags("A").length;i++)  
  document.all.tags("A")[i].attachEvent("onclick",setCap)  
  function   setCap(){  
  document.body.setCapture();  
  }  
  var   i=1  
  function   fun1(){  
  //你要执行的代码  
  if(i<=10){  
  a1.value=i  
  setTimeout("fun1()",500)  
  i++  
  }  
  else{  
  document.body.releaseCapture()  
  i=1  
  }  
  }  
  </script>Top

20 楼onestab()回复于 2002-10-11 23:52:49 得分 10

这是个非常古老的问题,牵涉到script的运行机制。  
  函数运行当中是无法得知a被点击的事件的。(没有VB的doEvents方法)  
  当他知道这个事件时,函数已经结束了。  
  就像一个人无法同时跨过两条河流。  
  较好的解决办法是友好地提醒用户,该段处理费时较长,请耐心等待。Top

21 楼goldenlove(潇洒.net)回复于 2002-10-11 23:54:14 得分 0

哦?...   不是说撤退了吗?.........Top

22 楼netstarry(等待流星)回复于 2002-10-12 00:52:00 得分 0

非常感谢各位的参与,其实我不是经常写javascript代码的,所以对javascript不很了解,  
  还是   onestab(┼─)   说得对,每个click事件都会被按顺序相应,这样就不可能采用在调用函数中采用某种方法屏蔽后来的click事件  
  如果不使用延迟的方法,问题几乎不能解决,所以  
  goldenlove(潇洒.net)和bencalie(Bencalie)   的方法中均使用了延迟来屏蔽短时间内的click事件,这样的处理对速度慢的机器是有效的,但是对于速度快的机器,相当于人为的降低了机器速度,不太可取,  
    net_lover(孟子E章)的方法是一个很奇怪的现象,如果不使用该方法,会出现我前面说的一种停顿现象,使用了该方法,虽然不能屏蔽掉后续的连续点击,但是却让每次点击引发的函数所产生的效果显示了出来,我认为这个方法是最佳的,速度快的机器不会出现停顿,速度慢的机器也不会出现我前面说的那种停顿现象(就像是没反应了一样),我采用了这个方法  
   
  十分感谢大家的参与,结贴Top

23 楼coolhealth(漫漫追求)回复于 2002-10-12 01:46:10 得分 0

下次要留意它!Top

相关问题

  • 怎样屏蔽窗体中鼠标左键单击的事件
  • 关于屏蔽鼠标左键单击的问题
  • 屏蔽shift+鼠标左键
  • 如何屏蔽鼠标左键
  • 如何屏蔽鼠标左键功能。谢谢。
  • 怎么屏蔽 shift 加鼠标左键新开一网页~!
  • 关于同时屏蔽鼠标左键与滚轮
  • 怎样向窗口发送一个鼠标左键左键单击事件???
  • 如何得到pictureBox 上的鼠标左键单击事件?
  • 求救:鼠标左键单击变双击!!

关键词

  • .net
  • 函数
  • 屏蔽
  • document
  • 执行
  • 点击
  • 屏蔽掉
  • 方法
  • releasecapture
  • 末尾

得分解答快速导航

  • 帖主:netstarry
  • net_lover
  • bencalie
  • goldenlove
  • onestab

相关链接

  • Web开发类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo