完美解决一个事件激活多个函数(2)
时间:2007-10-22 来源:不详 作者:林子
但是在上一部分中我们把事件的toString()当作JavaScript脚步本运行,实际上是运行一段函数代码,如果写成一个函数时还是用这个方法,即为函数中嵌套函数,将会出现意想不到的错误。 于是我们写成函数时把事件的toString()中的“function anonymous()”字符去掉,运行时就不是一个函数,而是函数内部的代码了。另外我们还可以定义先激活原有的函数还是先激活现在要激活的函数。最后为了方便使用,我们把事件和要激活的函数放在一起作为参数,写成以下函数:
function activeMore(event_function,order){
// order 为负数时先激活myFunction再激活前面的脚本
var isSn=event_function.indexOf("=",0);
var myEvent=event_function.substring(0,isSn);
var myFunction=event_function.substring(isSn 1,event_function.length);
var prefunction="";
if(eval(myEvent)) prefunction= eval(myEvent).toString().replace('function anonymous()',"");
内容来自dedecms
if(order<0) eval(myEvent "=new Function(myFunction '\' prefunction)");
else eval(myEvent "=new Function(prefunction '\' myFunction)");
}
以上函数我们先把参数“event_function”进行字符串分析,得到事件(myEvent)和要激活的函数(myFunction),然后取得原来激活的函数(preFunction),最后把多个函数放在一起激活。因为我们只是把“function anonymous()”去掉,preFunction字符串的两端会带有“{ }”号,但并不影响程序的运行。
下面我们举一个实际应用的例子:使网页中所有的链接都不出现虚线框。
为了达到这个目的,我们给所有的链接的onfocus事件添加一个激活函数“blur()”。为了保证一些链接原有的onfocus事件激活函数仍然有效,我们要用一次activeMore()函数;为了能够得到所有的链接,我们用到document.body的onload事件,又要用一次activeMore()函数:
//使链接不出现虚线框:
function blurLinks(){
for(i=0;i
}
}
activeMore("document.body.onload=blurLinks()");
上一篇:图片控制的渐变色文字 下一篇:用JS将网页窗口由小变大
文章评论
共有位Admini5网友发表了评论 查看完整内容