下一頁 1 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字符串的兩端會帶有“{ }”號,但并不影響程序的運行。