jQuery:使用变量作为函数名

时间:2013-03-18 17:52:17

标签: jquery html

我正在尝试创建一个函数来调用其他函数,具体取决于我正在与之交互的元素的类。

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

我看错了吗?我应该采用不同的方式吗? 谢谢

2 个答案:

答案 0 :(得分:7)

  

我看错了吗?

是。这是一个更合理的对象方法(foobar是类名称):

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)

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