可是在一個(gè)頁(yè)面中,我們可能會(huì)遇到有多個(gè)事件要激活多個(gè)函數(shù),每個(gè)事件都要寫(xiě)一遍那樣的代碼,顯然不是好主意。聰明的讀者可能已經(jīng)想到,應(yīng)該寫(xiě)成一個(gè)函數(shù)activeMore(),哪個(gè)事件要激活多個(gè)函數(shù)的,直接就用activeMore()就行。
但是在上一部分中我們把事件的toString()當(dāng)作JavaScript腳步本運(yùn)行,實(shí)際上是運(yùn)行一段函數(shù)代碼,如果寫(xiě)成一個(gè)函數(shù)時(shí)還是用這個(gè)方法,即為函數(shù)中嵌套函數(shù),將會(huì)出現(xiàn)意想不到的錯(cuò)誤。 于是我們寫(xiě)成函數(shù)時(shí)把事件的toString()中的“function anonymous()”字符去掉,運(yùn)行時(shí)就不是一個(gè)函數(shù),而是函數(shù)內(nèi)部的代碼了。另外我們還可以定義先激活原有的函數(shù)還是先激活現(xiàn)在要激活的函數(shù)。最后為了方便使用,我們把事件和要激活的函數(shù)放在一起作為參數(shù),寫(xiě)成以下函數(shù):
function activeMore(event_function,order){ // order 為負(fù)數(shù)時(shí)先激活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)"); }
以上函數(shù)我們先把參數(shù)“event_function”進(jìn)行字符串分析,得到事件(myEvent)和要激活的函數(shù)(myFunction),然后取得原來(lái)激活的函數(shù)(preFunction),最后把多個(gè)函數(shù)放在一起激活。因?yàn)槲覀冎皇前选癴unction anonymous()”去掉,preFunction字符串的兩端會(huì)帶有“{ }”號(hào),但并不影響程序的運(yùn)行。
下面我們舉一個(gè)實(shí)際應(yīng)用的例子:使網(wǎng)頁(yè)中所有的鏈接都不出現(xiàn)虛線框。
為了達(dá)到這個(gè)目的,我們給所有的鏈接的onfocus事件添加一個(gè)激活函數(shù)“blur()”。為了保證一些鏈接原有的onfocus事件激活函數(shù)仍然有效,我們要用一次activeMore()函數(shù);為了能夠得到所有的鏈接,我們用到document.body的onload事件,又要用一次activeMore()函數(shù):
//使鏈接不出現(xiàn)虛線框: 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)要激活的函數(shù)是“if(this.blur)this.blur()”,參數(shù)order的值為-1表先激活該函數(shù)再激活它們?cè)械暮瘮?shù);document.body.onload事件要激活的函數(shù)是“blurLinks()”,參數(shù)order的值省略(或?yàn)榉秦?fù)數(shù))表先激活它原有的函數(shù)再激活“blurLinks()”。
從例子中可以看到,這個(gè)函數(shù)用起來(lái)還挺簡(jiǎn)單吧。有了activeMore()函數(shù),無(wú)論多少個(gè)事件要激活多個(gè)函數(shù),都可以用同樣的語(yǔ)法解決了!
|
溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!