0

次のようにjqueryを使用してdiv idから削除されたテキストを使用してjavascript関数を呼び出す方法を理解しようとしています:

$('#selector').attr('id');

返された id はテキスト オブジェクトです。これを使用して、同じ名前の JavaScript オブジェクトを呼び出します。基本的に、カレンダーに予定があり、バックグラウンドで理由、時間、場所などのさまざまな変数を保持するオブジェクトのセットがあります。これらのオブジェクトは、このようなカスタム コンストラクター関数を使用して作成されています。

function appt(id,...){
  this.id;
  etc...
 }
 var appt12 = new appt(id,...);

次に、var id = appt12.id の行に沿ってオブジェクトとして呼び出すことができるようにしたいと考えています。

これを行うために eval を使用できることがわかりましたが、このフォーラムでは eval の使用について多くの議論があるようです。セキュリティ上、ブラウザでのみ呼び出されるため、ほとんどのセキュリティはphpで発生します。

eval を使用すると、次のようになります。

var apptObj = eval(apptid);

eval に渡した後、テキスト ID をオブジェクトへの参照として使用できます。他の投稿を読んだのですが、これはベストプラクティスではありません。

この問題を解決するための評価以外のアプローチについての考え。

前もって感謝します。

4

2 に答える 2

1

次のように関数をオブジェクトに保持する必要があります。

var operations = {
    "add": function(){...},
    "remove": function(){...},
    "edit": function(){...}
};

次に、次のように呼び出します。

var op = element.id;
operations[op]();

Ufuk が言及したグローバル ウィンドウ オブジェクトを使用することもできますが、一般的には嫌われています。関連する関数がいくつかある場合、それらをオブジェクトに保持し、それらがグローバル スコープ内で浮動しないようにすることは、よりクリーンで整理されていると見なされます。

于 2012-06-03T15:35:56.323 に答える
0

呼び出す関数がグローバルである場合は、ウィンドウ オブジェクトのインデックスによってアクセスできます。

//get the function first
var myFunction = window[functionName];

//call the function with your parameters
myFunction(param);

アップデート:

私が正しく理解している場合、IDを使用して変数を作成しようとしています。その場合は、次の方法で実行できます。

window['appt'+id] = appt(id);

Dennis が述べたように、グローバル変数を使用しない方がよいでしょう。代わりに、これらすべての変数を別のオブジェクトに保持できます。次に例を示します。

//initialize it if it is undefined
var apptHolder = apptHolder || {};

//assign the property
apptHolder['appt'+id] = appt(id);

//if you need the apptHolder to be global
window.apptHolder = apptHolder;
于 2012-06-03T15:28:21.150 に答える