5

我正在尝试创建一个函数,该函数根据我正在与之交互的元素的类调用其他函数。

我希望能够使用元素的类来调用函数,而不是使用 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 语句来驱动它)然后让该函数执行它需要执行的任何操作。

我看错了吗?我应该以不同的方式去做吗?谢谢

4

2 回答 2

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 );
}

此外,您可能需要重新考虑使用类名来存储信息。如果有多个班级,则不能保证您想要的班级就是第一个班级。而是查看数据属性。

于 2013-03-18T17:57:13.877 回答
2

您可以使用 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)

并不是说这是一个理想的解决方案——也许您应该考虑使用一个通用函数或一组函数,而不是为多个类名使用多个函数。

于 2013-03-18T17:58:58.977 回答