0

JavaScript では、次のような文字列があります。

"doSomething('param1','param2')"

そして実行したい。普通に使えるのはわかった

window['doSomething']('param1', 'param2');

しかし、それは関数名が引数とは別の場合にのみ機能します。私の場合、それらはすでに結合されています。私は eval() を使用できると思いますが、コンセンサスは避けるべきだということです。別の方法はありますか?

編集: 詳細情報のリクエストに答えるには:私はこの文字列を次のように使用しています:

<a id="YesButton" onclick="closeModalView_Yes("doSomething('param1','param2')")">

closeModalView_Yes は、モーダルの yes/no ウィンドウを閉じてから、指定された関数を実行しますが、パラメータを 1 つだけ取る doSomethingElse(param1) を渡す場合もあります。

4

2 に答える 2

1

次のように eval を使用します。

eval( "console.log( 'hey', 'here I am' )" );

ただし、 eval はかなり危険であり、お勧めしません。

可能であれば (まだあなたのケースに関する情報はあまりありません)、<script>テンプレートのタグの間に JavaScript をレンダリングして、「通常のコード」にして、デバッグをより簡単にします。

また、コードではなくデータ (つまり、JSON を使用) を渡すことをお勧めします。ロジックを再考するか、追加情報を提供してください。

于 2013-07-31T19:54:59.317 に答える
1
<a id="YesButton" onclick="closeModalView_Yes("doSomething('param1','param2')")">

それを文字列として渡すのではなく、関数として渡す必要があります。

closeModalView_Yes(function(){ doSomething('param1','param2'); });

一緒に

function closeModalView_Yes(callback) {
    // do whatever needs to be done to close the window
    // and after that
    callback();
}

ところで、あなたの現在のアプローチでは、HTML は有効でさえありません。

<a id="YesButton" onclick="closeModalView_Yes(&quot;doSomething('param1','param2')&quot;)">
<!--                                          ^^^^^^                              ^^^^^^ -->

インライン属性の代わりにJavaScript を介してイベントを登録することで、これを回避できたはずです。

于 2013-07-31T20:38:42.943 に答える