完美解决一个事件激活多个函数
alert("这是JS脚本调用的函数");
}
//现在我们要激活的函数是“myfunction()”,原来要激活的函数是<BODY>标签里的“alert()”,
//下面这段代码可以两个一起激活:
dedecms.com
myActive="myfunction()";
if(document.body.onload.toString())
{
eval(document.body.onload.toString().replace('anonymous()','bodyload()'));
document.body.onload=new Function("bodyload();" myActive);
}
else document.body.onload=new Function(myActive);
</script>
</BODY> 内容来自dedecms
上段代码中,变量myActive是JS代码中要激活的函数,eval(string)函数是把其字符串参数当作是javascript脚本来运行。我们把document.body.onload.toString()中的“anonymous()”替换为“bodyload()”,得到一个新函数“bodyload()”,它包含了所有原来要激活的函数,再把函数“bodyload()”和我们要激活的函数一起在OnLoad事件中激活。
dedecms.com
为什么要把“anonymous()”替换为“bodyload()”呢?因为这个方法适用于所有事件(例如onMouseOver),而所有事件toString()都是得到“anonymous()”,为了不和其它事件也用了这个方法冲突,我们把它替换掉。在其它事件中也依此替换即可。
织梦好,好织梦
好了,我们运行一下最终代码,如你所愿地两个函数都激活了吧?添加的代码也挺简单,有挺强的适用性。
从上一部分的介绍中,我们已经得到了解决一个事件激活多个函数的基本方法。 内容来自dedecms
可是在一个页面中,我们可能会遇到有多个事件要激活多个函数,每个事件都要写一遍那样的代码,显然不是好主意。聪明的读者可能已经想到,应该写成一个函数activeMore(),哪个事件要激活多个函数的,直接就用activeMore()就行。
但是在上一部分中我们把事件的toString()当作javascript脚步本运行,实际上是运行一段函数代码,如果写成一个函数时还是用这个方法,即为函数中嵌套函数,将会出现意想不到的错误。 于是我们写成函数时把事件的toString()中的“function anonymous()”字符去掉,运行时就不是一个函数,而是函数内部的代码了。另外我们还可以定义先激活原有的函数还是先激活现在要激活的函数。最后为了方便使用,我们把事件和要激活的函数放在一起作为参数,写成以下函数: 内容来自dedecms
function activeMore(event_function,order){
// order 为负数时先激活myFunction再激活前面的脚本

文章评论
共有位Admini5网友发表了评论 查看完整内容