2014-01-31 74 views
0

我有一些像這樣在數組中定義的函數。動態調用一個javascript函數

checkInputType : function(sel){ 
alert($(sel).prop('type')); 
}, 
checkSelect : function(el){ 
....... 
}, 
..... 

我可以這樣稱呼它options.checkInput($(this));。這是行得通的。
現在我想動態調用這些定義的函數中的任何一個。所以我有這個數組中的函數名稱。

var elmType2Func = {'input' : 'checkInput', 'select' : 'checkSelect', 'textarea' : 'checkTextarea'}; 

現在通過表單內的所有元素循環我想調用的每個元素(elmType2Func陣列元件作爲密鑰函數名作爲值)正確的函數。

var element = $(this).prop('tagName').toLowerCase(); 

我不能把這樣的 - options.elmType2Func[element]($(this)); 我知道這是不是調用此函數的正確途徑。
任何人都可以幫助我。

+0

難道你只需要做'選項[elmType2Func [元]($ (this));'? – Simon

回答

3

您需要存儲的功能,而不是他們的名字:

var elmType2Func = {'input' : checkInput, 'select' : checkSelect, 'textarea' : checkTextarea}; 

http://jsfiddle.net/hmb25/

如果此功能已經有一些對象的成員,如:

var options = { 
    checkInput: function() {...}, 
    checkSelect: function() {...}, 
} 

,則可以繼續串在elmType2Func

var elmType2Func = {'input' : 'checkInput', 'select' : 'checkSelect', 'textarea' : 'checkTextarea'}; 

,並使用雙間接引用它們:

var tag = $(this).prop('tagName').toLowerCase(); 
var fun = options[elmType2Func[tag]]; 

給你的函數的引用。

+0

是的。這些函數已經是options對象的成員。謝謝。完美地工作... –

2

而不是將用於名稱的字符串放置功能

var elmType2Func = { 
    'input' : checkInput, 
    'select' : checkSelect, 
    'textarea' : checkTextarea, 
    'submit' : function (arg) { ... } 
}; 
2
options.elmType2Func[element]($(this)); 

即使用該文本名稱elmType2Func對象上訪問屬性 - 你想在這裏用括號標記以及:

options[elmType2Func[element]]($(this)); 

或者,你可能不會使用elmType2Func作爲屬性查找表,而是直接查找功能:

var elmType2Func = { 
    'input' : options.checkInput, 
    'select' : options.checkSelect, 
    'textarea' : options.checkTextarea 
}; 
elmType2Func[element]($(this));