2014-01-31 33 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));