探讨:如何动态改变onclick事件的处理?

walkingpoison 2002-11-29 09:29:33
由于需要在代码中根据实际需要动态修改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
...全文
2073 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
emu 2002-11-29
  • 打赏
  • 举报
回复
Lostinet(迷失网络)的方法能通过的
walkingpoison 2002-11-29
  • 打赏
  • 举报
回复
等你的专家分达到1000就可以给200分了
iflyer 2002-11-29
  • 打赏
  • 举报
回复
UP

BTW:为什么你可以给200分,我只能给100分?
walkingpoison 2002-11-29
  • 打赏
  • 举报
回复
总结:
在调用带参数的函数的时候,可以用两种方法
1.使用obj.onclick=Function("funcA(argA,argB)"))的方法直接修改。

2.使用setAttribute方法,obj.setAttribute("onclick",Function("funcA(argA,argB)"),0)。

经过测试,attachEvent方法仍然不可用。还有待探讨。
walkingpoison 2002-11-29
  • 打赏
  • 举报
回复
wangxj0600(旁观拍手笑疏狂,疏又何妨,狂又何妨)你可以试一下带有参数的情况,代码会略有不同的。

经过测试,我上面提到的第4种方法可以改进为setAttribute("onclick",Function("funcA(argA,argB)"),0)。
我想主要问题还是在这个Function上面吧,通过转换就可以正常使用了。
walkingpoison 2002-11-29
  • 打赏
  • 举报
回复
meizz(梅花雨):我这里就是不成功的原因就是,我调用的函数是有参数的,写法跟不带参数的相同是不行的。

经过测试,我发现obj.attachEvent("onclick",new Function("funcA(argA,argB)"))的方法在我这里仍然不行。
不过obj.onclick=Function("funcA(argA,argB)"))的方法通过测试为可用。

Lostinet(迷失网络)的方法比较复杂,我还没有进行测试。但是我觉得document.body.attachEvent("onclick",GetTheFunction(a,b));这句有可能不行,因为带参数的我从来没有调试通过。
wangxj0600 2002-11-29
  • 打赏
  • 举报
回复
<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>
meizz 2002-11-29
  • 打赏
  • 举报
回复
还有一种很好的办法就是你在函数里直接定义某个控件的某个事件.
<span id=aa>asdfghjkl</span>

<script language=javascript>
function document.all.aa.onclick()
{
alert("这已经是重新定义过后的函数!");
}
</script>
emu 2002-11-29
  • 打赏
  • 举报
回复
带参数的可以这么写(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>
Lostinet 2002-11-29
  • 打赏
  • 举报
回复
<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>
blues-star 2002-11-29
  • 打赏
  • 举报
回复
<body onload="alert()">
</body>
<script>
document.body.onload = Function("alert('changed')");
</script>
blues-star 2002-11-29
  • 打赏
  • 举报
回复
<body onload="alert()">
</body>
<script>
document.body.onload = "";
</script>

如果没有alert改变就成功。
meizz 2002-11-29
  • 打赏
  • 举报
回复
不懂你为什么没有成功,到少我这里测试是通过的 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>
基于扩展(EKF)和无迹卡尔曼滤波(UKF)的电力系统动态状态估计(Matlab代码实现)内容概要:本文档围绕基于扩展卡尔曼滤波(EKF)和无迹卡尔曼滤波(UKF)的电力系统动态状态估计展开,提供了完整的Matlab代码实现方案。重点介绍如何利用EKF与UKF算法对电力系统中的动态状态进行高精度估计,尤其适用于存在非线性特性和测量噪声的实际场景。文中详细阐述了两种滤波方法的理论基础、适用条件及在电力系统中的具体应用流程,并通过仿真验证其有效性。此外,文档还整合了多个相关科研方向的技术资源,涵盖智能优化算法、机器学习、信号处理、路径规划、电力系统优化等多个领域,突出Matlab在科研仿真中的广泛应用。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及工程技术人员,尤其适合从事电力系统状态估计、动态建模与仿真研究的相关从业者;; 使用场景及目标:①掌握EKF与UKF在非线性系统状态估计中的实现原理与差异;②应用于含新能源接入的复杂电力系统动态状态估计;③为科研项目、论文复现或算法优化提供可运行的代码基础和技术参考;; 其他说明:文档内容高度聚焦科研实用价值,强调“借力”于成熟算法与工具提升研究效率,建议结合提供的网盘资源(含YALMIP等工具包)进行代码调试与扩展应用,同时按目录顺序系统学习以避免理解断层。

87,996

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧