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.ini 文件中。

使用 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]();

You could use the global window object that Ufuk mentioned, but it is generally frowned upon. If you have several related functions, keeping them in an object and preventing them from floating in the global scope is considered cleaner and more organized.

于 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);

就像丹尼斯提到的那样,如果你不使用全局变量会更好。相反,您可以将所有这些变量保存在另一个对象中。这是一个例子:

//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 回答