3

ページ上のすべてのフィールドに対して、ターゲットが空白であるか、ユーザーが入力した値を含むかを主にチェックする汎用クリック イベント関数を作成しようとしています。ただし、このジェネリック関数がより具体的な関数の存在をチェックし、見つかった場合はターゲット値の検証を処理できるようにしたいと考えています。例:

function genValueCheck(event) {
   var af = event.target.id+'_checkValue';
   if (typeof af == 'function') runFunction(af,[event]); // logic specific to this field
   else { 
      // logic for checking for blanks, etc which applies to all fields
   }
}

しかし、上記の例では typeof は 'string' を返します。これは、'af' に含まれるもの、つまり関数の名前ではなく、typeof 'af' をチェックしているためです。

私がやろうとしていることは可能ですか?

前もって感謝します。

4

2 に答える 2

2

グローバル名前空間を汚染しないように、すべての関数を含むオブジェクトを作成し、ブラケット表記を使用してそれを取得します。

var validators = {};
validators.checker1 = function() { ... };

function genValueCheck(event) {
    var af = event.target.id+'_checkValue';
    if (typeof validators[af] == 'function') {
        validators[af](event); // logic specific to this field
    } else { 
    // logic for checking for blanks, etc which applies to all fields
    }
}
于 2012-08-26T15:22:51.970 に答える
2

それaf 文字列だからです。関数がグローバル スコープに存在する場合は、 を使用しますwindow[af]。これはあなたのために働くはずです:

function genValueCheck(event) {
   var af = event.target.id+'_checkValue';
   if (typeof window[af] == 'function') runFunction(af,[event]); // logic specific to this field
   else { 
      // logic for checking for blanks, etc which applies to all fields
   }
}

デモ

于 2012-08-26T15:02:59.287 に答える