我在这样的数组中定义了一些函数。
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 :(得分:3)
您需要存储函数,而不是它们的名称:
var elmType2Func = {'input' : checkInput, 'select' : checkSelect, 'textarea' : checkTextarea};
如果函数已经是某个对象的成员,例如:
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));