我正在尝试创建一个函数来调用其他函数,具体取决于我正在与之交互的元素的类。
我希望能够使用元素的类来调用函数,而不是使用if语句。示例如下:
function validate(thisInput){
var thisClass = thisInput.attr("class").split(' ')[0];
validate + class(thisInput);
/*This is what I would like to happen:
the class is grabbed from above, then that class name (whatever it is)
calls it's own function. I will be creating a function for each class.
*/
}
function validateClassname(thisInput) {
//do something
}
正如您所看到的,我正在尝试找到类名,将其置于自己的函数中(不使用if语句来驱动它)然后让该函数执行它需要做的任何事情。
我看错了吗?我应该采用不同的方式吗? 谢谢
答案 0 :(得分:7)
我看错了吗?
是。这是一个更合理的对象方法(foo
和bar
是类名称):
var validationRules = {
foo: function( input ) { /* whatever */ },
bar: function( input ) { /* whatever */ }
}
function validate(thisInput){
var thisClass = thisInput.attr("class").split(' ')[0];
validationRules[ thisClass ]( thisInput );
}
此外,您可能需要重新考虑使用类名来存储信息。如果有多个课程,则无法保证您想要的课程是第一课程。请改为data attributes。
答案 1 :(得分:1)
您可以使用eval()函数来评估可变命名的函数:
var className = "OnName";
var classType = "OnType";
eval("validate" + className + "()")
// calls validateOnName()
eval("validate" + classType + "()")
// calls validateOnType()
var someInput = 234;
eval("validate" + classType + "(" + someInput + ")")
// calls validateOnType(234)
并不是说这是一个理想的解决方案 - 也许您应该考虑使用泛型函数或函数组,而不是为多个类名创建多个函数。