关闭

关于onclick时间的改变

1156人阅读 评论(0) 收藏 举报

由于需要在代码中根据实际需要动态修改onclick事件的处理程序,于是我查找了一下csdn和msdn,找到了一些方法。但是试过之后发现都不起作用。  
  1.使用setAttribute方法。  
  setAttribute("onClick","funcA(argA,argB)",0)  
  结果是onClick属性确实被赋予了"funcA(argA,argB)",但是却只是一个字符串,无法运行这个函数。而我把"funcA(argA,argB)"的引号去掉以后,却又没有反应了。  
   
  2.使用attachEvent方法  
  attachEvent("onClick",funcA(argA,argB))  
  结果似乎并不奏效。attachEvent的第二个参数需要一个指向函数的指针,我这里函数加上了参数,结果就根本不起作用了。  
   
  3.迫不得已,我专门写了一个临时的函数funcB(),里面只有一条语句:funcA(argA,argB)。然后使用attachEvent("onClick",funcB),结果是仍然没有起作用——我不知道这里是否需要配合dettachEvent的使用,如果需要,我也很难得到onClick事件原先指向的函数。  
   
  4.我仍然使用上面的临时函数funcB(),使用setAttribute("onClick",funcB,0),结果这次成功了。  
   
  事情总算圆满解决了,但是仍然有很多值得思考的地方。为什么使用前面3种方法都不行呢?如果不写临时函数,能完成需要的功能吗?这些我都不是很清楚,希望各位能够给我一些指点和参考。  
   
  附:调试环境:win2000   pro,   ie   6.0  
 
问题点数:200、回复次数:13
Top
 

 1 楼meizz(梅花雪)回复于 2002-11-29 09:44:30 得分 0 不懂你为什么没有成功,到少我这里测试是通过的   win2k   server   IE   6.0  
   
  <span   id=aa>asdfghjkl</span><br>  
  <input   type=button   value=click   onclick=cc()>  
  <script   language=javascript>  
  function   cc()  
  {  
        document.all.aa.attachEvent("onclick",bb);  
  }  
  function   bb()  
  {  
        alert("ok");  
  }  
  </script>
Top

2 楼runmin()回复于 2002-11-29 09:47:03 得分 0 <body   onload="alert()">  
  </body>  
  <script>  
  document.body.onload   =   "";  
  </script>  
   
  如果没有alert改变就成功。
Top

3 楼runmin()回复于 2002-11-29 09:50:25 得分 50<body   onload="alert()">  
  </body>  
  <script>  
  document.body.onload   =   Function("alert('changed')");  
  </script>
Top

4 楼Lostinet(每晚 8:00 见)回复于 2002-11-29 09:54:06 得分 50<body>  
  </body>  
  <script>  
   
  function   MyFunction(arg1,arg2)  
  {  
  alert(arg1+":"+arg2);  
  }  
   
  var   a="aa";  
  var   b="bb";  
  document.body.attachEvent("onclick",GetTheFunction(a,b));  
  a="11";  
  b="22";  
   
  MyFunction(a,b);  
   
  function   GetTheFunction(x,y)  
  {  
  return   Proxy;  
  function   Proxy()  
  {  
  return   MyFunction(x,y);  
  }  
  }  
   
  </script>
Top

5 楼emu(月亮不在手指尖上)回复于 2002-11-29 10:00:26 得分 50带参数的可以这么写(IE5下面通过):  
   
  <span   id=aa>asdfghjkl</span><br>  
  <input   type=button   value=click   onclick=cc()>  
  <script   language=javascript>  
  function   cc()  
  {  
        document.all.aa.attachEvent("onclick",new   Function("alert('ok')"));  
  }  
  </script>
Top

6 楼meizz(梅花雪)回复于 2002-11-29 10:04:32 得分 50还有一种很好的办法就是你在函数里直接定义某个控件的某个事件.  
  <span   id=aa>asdfghjkl</span>  
   
  <script   language=javascript>  
  function   document.all.aa.onclick()  
  {  
        alert("这已经是重新定义过后的函数!");  
  }  
  </script>
Top

7 楼wangxj0600(闭门思过中)回复于 2002-11-29 10:21:34 得分 0 <button   onclick=bb()   id=aa>dsf</button>  
  <button   onclick="document.all.aa.onclick=cc"   id=dd   >dsf</button>  
  <script>  
  function   bb(){alert("first");}  
  function   cc(){alert("changed");}  
   
  </script>
Top

8 楼walkingpoison(walkingpoison)回复于 2002-11-29 10:27:54 得分 0 meizz(梅花雨):我这里就是不成功的原因就是,我调用的函数是有参数的,写法跟不带参数的相同是不行的。  
   
  经过测试,我发现obj.attachEvent("onclick",new   Function("funcA(argA,argB)"))的方法在我这里仍然不行。  
  不过obj.onclick=Function("funcA(argA,argB)"))的方法通过测试为可用。  
   
  Lostinet(迷失网络)的方法比较复杂,我还没有进行测试。但是我觉得document.body.attachEvent("onclick",GetTheFunction(a,b));这句有可能不行,因为带参数的我从来没有调试通过。  
 
Top

9 楼walkingpoison(walkingpoison)回复于 2002-11-29 10:34:36 得分 0 wangxj0600(旁观拍手笑疏狂,疏又何妨,狂又何妨)你可以试一下带有参数的情况,代码会略有不同的。  
   
  经过测试,我上面提到的第4种方法可以改进为setAttribute("onclick",Function("funcA(argA,argB)"),0)。  
  我想主要问题还是在这个Function上面吧,通过转换就可以正常使用了。
Top

10 楼walkingpoison(walkingpoison)回复于 2002-11-29 10:59:43 得分 0 总结:  
  在调用带参数的函数的时候,可以用两种方法  
  1.使用obj.onclick=Function("funcA(argA,argB)"))的方法直接修改。  
   
  2.使用setAttribute方法,obj.setAttribute("onclick",Function("funcA(argA,argB)"),0)。  
   
  经过测试,attachEvent方法仍然不可用。还有待探讨。
 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:11174762次
    • 积分:59602
    • 等级:
    • 排名:第47名
    • 原创:673篇
    • 转载:2172篇
    • 译文:0篇
    • 评论:540条
    文章分类
    文章存档
    最新评论
    计算流量