
<br>
<TXScript:Template TemplateName="文章画中画广告"></TXScript:Template>从上一部分的介绍中,我们已经得到了解决一个事件激活多个函数的基本方法。 <br>
<br>
可是在一个页面中,我们可能会遇到有多个事件要激活多个函数,每个事件都要写一遍那样的代码,显然不是好主意。聪明的读者可能已经想到,应该写成一个函数activeMore(),哪个事件要激活多个函数的,直接就用activeMore()就行。<br>
<br>
但是在上一部分中我们把事件的toString()当作JavaScript脚步本运行,实际上是运行一段函数代码,如果写成一个函数时还是用这个方法,即为函数中嵌套函数,将会出现意想不到的错误。 于是我们写成函数时把事件的toString()中的“functi"; <br>
if(eval(myEvent)) prefunction= eval(myEvent).toString().replace(''function anonymous()'',"");<br>
<br>
if(order<0) eval(myEvent+"=new Function(myFunction+''\\n''+prefunction)");<br>
else eval(myEvent+"=new Function(prefunction+''\\n''+myFunction)");<br>
}<br>
<br>
以上函数我们先把参数“event_function”进行字符串分析,得到事件(myEvent)和要激活的函数(myFunction),然后取得原来激活的函数(preFunction),最后把多个函数放在一起激活。因为我们只是把“function anonymous()”去掉,preFunction字符串的两端会带有“{ }”号,但并不影响程序的运行。<br>
下面我们举一个实际应用的例子:使网页中所有的链接都不出现虚线框。
为了达到这个目的,我们给所有的链接的onfocus事件添加一个激活函数“blur()”。为了保证一些链接原有的onfocus事件激活函数仍然有效,我们要用一次activeMore()函数;为了能够得到所有的链接,我们用到document.body的onload事件,又要用一次activeMore()函数:
//使链接不出现虚线框:
function blurLinks(){
for(i=0;i
activeMore("document.links["+i+"].onfocus=if(this.blur)this.blur()",-1);
}
}
activeMore("document.body.onload=blurLinks()");
链接的onfocus事件(document.links[i].onfocus)要激活的函数是“if(this.blur)this.blur()”,参数order的值为-1表先激活该函数再激活它们原有的函数;document.body.onload事件要激活的函数是“blurLinks()”,参数order的值省略(或为非负数)表先激活它原有的函数再激活“blurLinks()”。
从例子中可以看到,这个函数用起来还挺简单吧。有了activeMore()函数,无论多少个事件要激活多个函数,都可以用同样的语法解决了!
无忧站长学院,建站自然无忧www.5ucms.org