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 に答える