动态调用javascript函数

时间:2014-01-31 08:48:51

标签: javascript jquery arrays

我在这样的数组中定义了一些函数。

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)); 我知道这不是调用此函数的正确方法。
任何人都可以帮我这个。

3 个答案:

答案 0 :(得分: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]];

为您提供该功能的参考。

答案 1 :(得分:2)

而不是为名称添加字符串放置函数

var elmType2Func = {
    'input' : checkInput,
    'select' : checkSelect, 
    'textarea' : checkTextarea,
    'submit' : function (arg) { ... }
};

答案 2 :(得分: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));