evalなら動作確認しています。
他に方法は有るのでしょうか?
<script type="text/javascript">
var id = "test1";
var dc = "ok";
var aa = "1";
var bb = "3";
function test_count(id,dc,aa,bb){
var ok = id + "_"+dc+"('"+aa+"','"+bb+"')";
// eval(id + "_"+dc+"('"+aa+"','"+bb+"')")
alert(ok)
return ok;
}
function test1_ok(id,dc){
alert(id) //この結果、1が表示されればOK
}
</script>
</head>
<body onload="test_count(id,dc,aa,bb);">
JavaScriptは、関数オブジェクトと連想配列が使えるので、
こうすれば可能です。
<html> <head> <script type="text/javascript"> var id = "test1"; var dc = "ok"; var aa = "1"; var bb = "3"; // 関数を格納する連想配列 var funcObj = new Array(); // 文字列で指定できる関数連想配列への関数の追加 funcObj.test1_ok = function(id,dc){ alert(id) //この結果、1が表示されればOK } function test_count(id,dc,aa,bb) { funcObj[id+"_"+dc](aa,bb); } </script> </head> <body onload="test_count(id,dc,aa,bb);"> <body> </html>
詳しい解説はこちらに書きます。
JavaScript/関数名を文字列で指定して動的に呼び出す機構(evalを使わず) - ジャックズラボ jack's Lab
実行関数がグローバル宣言であるなら、以下で可能です。
<script type="text/javascript"> var id = "test1"; var dc = "ok"; var aa = "1"; var bb = "3"; function test_count(id,dc,aa,bb){ window[id + "_" + dc](aa, bb); } function test1_ok(id,dc){ alert(id); //この結果、1が表示されればOK } test_count(id, dc, aa, bb); </script>
グローバル宣言なら、windowオブジェクトのメンバになるため、window["関数名"]();で呼び出すことができます。
こちらのほうが負荷が若干少ないですね。
ありがとうございます。
>後、もうひとつ聞きたいのですが、
>ここで質問してもいいですか?
?
><body onload="test_count(id,dc,aa,bb);">時に
>クライアント側(ブラウザで開いている方)が
>CPU負荷が高くなるのですが
>どうしたらいいかわかりますか?
時間待ち処理の中でfor/while等の処理ループを使った
待ち方をしてるとCPU負荷が高くなります、
(これにはタイマーを使った予防法があります。)
が、
質問文内では、待ち処理と呼び出しの状態遷移の部分の
処理コードがないので、具体的なコードを出されたほうが
回答しやすいと思います。
出来ましたw
大変ありがとうございます。
後、もうひとつ聞きたいのですが、
ここで質問してもいいですか?
<body onload="test_count(id,dc,aa,bb);">時に
クライアント側(ブラウザで開いている方)が
CPU負荷が高くなるのですが
どうしたらいいかわかりますか?