完美解决一个事件激活多个函数(2)

小黑果断跳大了

小黑果断跳大了

2016-01-29 11:33

完美解决一个事件激活多个函数(2),完美解决一个事件激活多个函数(2)
 


  可是在一个页面中,我们可能会遇到有多个事件要激活多个函数,每个事件都要写一遍那样的代码,显然不是好主意。聪明的读者可能已经想到,应该写成一个函数activeMore(),哪个事件要激活多个函数的,直接就用activeMore()就行。

  但是在上一部分中我们把事件的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()',"");

if(order<0) eval(myEvent+"=new Function(myFunction+'\n'+prefunction)");
else eval(myEvent+"=new Function(prefunction+'\n'+myFunction)");
}

  以上函数我们先把参数“event_function”进行字符串分析,得到事件(myEvent)和要激活的函数(myFunction),然后取得原来激活的函数(preFunction),最后把多个函数放在一起激活。因为我们只是把“function anonymous()”去掉,preFunction字符串的两端会带有“{ }”号,但并不影响程序的运行。

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com)

  下面我们举一个实际应用的例子:使网页中所有的链接都不出现虚线框。

  为了达到这个目的,我们给所有的链接的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()函数,无论多少个事件要激活多个函数,都可以用同样的语法解决了!

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com) 
展开更多 50%)
分享

猜你喜欢

完美解决一个事件激活多个函数(2)

电脑网络
完美解决一个事件激活多个函数(2)

完美解决一个事件激活多个函数

电脑网络
完美解决一个事件激活多个函数

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

如何让一个函数返回多个值(C#)

电脑网络
如何让一个函数返回多个值(C#)

一个asp函数 解决SQL Injection漏洞

Web开发
一个asp函数 解决SQL Injection漏洞

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

一个asp函数 解决SQL Injection漏洞

ASP
一个asp函数  解决SQL Injection漏洞

一个高ai的分页函数和一个url函数

PHP
一个高ai的分页函数和一个url函数

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

javascript中的数组应用的一点发现

javascript中的数组应用的一点发现

javascript实例教程(19) 使用HoTMetal(5)

javascript实例教程(19) 使用HoTMetal(5)
下拉加载更多内容 ↓