0

次のような JavaScript 関数を呼び出しています。

window[className + 'Click']();

className 変数には他の文字列が含まれており、最終的に myClick() や whatEverClick() などの関数を呼び出します。それは大丈夫ですが、最初の部分を大文字と小文字を区別しないようにする方法はありますか?

例:
classname = whatEver --> call whatEverClick()
classname = whatEver --> call whatEverClick()

それは可能ですか?ありがとう!

4

2 に答える 2

4

おそらくそうすべきではありませんが、できます(一部の言語の特異性を除く):

ステップ 1: すべてのウィンドウ プロパティの小文字マップを作成します。

var map = {};
for (var key in window) map[key.toLowerCase()] = window[key];

ステップ 2: 関数を呼び出します:

map[className.toLowerCase()+'click'](); 

thisウィンドウをコンテキスト ( )として呼び出したい場合は、次を使用します。

map[className.toLowerCase()+'click'].call(window); 

デモンストレーション

于 2013-04-04T13:18:46.693 に答える
2

グローバルオブジェクトのコンテキストで実行することが絶対に必要な場合は、このソリューションを使用してください。それ以外の場合は、ソリューション2を好みます(ディストロイの回答に触発されました)

解決策 1

if(window[className+"Click"]){
    window[className+'Click']();
}else{
    for(var f in window){
        if(window.hasOwnProperty(f) && typeof window[f]=='function'){
            if(f.toLowerCase() === className.toLowerCase()+'click'){
                window[f]();
            }
        }
    }
}

解決策 2

//Create an Object and store all the references
var functions_hash = {}

for(var f in window){
    if(window.hasOwnProperty(f) && typeof window[f]=='function'){
        functions_hash[f.toLowerCase] = window[f]
    }
}

//execute using the hash later on
functions_hash[className.toLowerCase()+'click']
于 2013-04-04T13:23:41.153 に答える