Javascript 调用对象中定义的函数
我有一个对象,它定义了在页面元素的单击事件中要调用的函数的名称和参数Javascript 调用对象中定义的函数,javascript,Javascript,我有一个对象,它定义了在页面元素的单击事件中要调用的函数的名称和参数 object_array = [ { id: "id1", onclick: "load_file(filename.php);", }, { id: "id2", onclick: "open_url('http://url.com');", } ]; 必须动态检索这些信息。我希望在click事件中为数组中的给定对象调用onclick
object_array = [
{
id: "id1",
onclick: "load_file(filename.php);",
},
{
id: "id2",
onclick: "open_url('http://url.com');",
}
];
必须动态检索这些信息。我希望在click事件中为数组中的给定对象调用onclick函数
$('element').click(function() {
// call object.onclick
});
看来eval不是一个好的选择。有其他方法调用该函数吗?您可以声明如下函数
onclick : function()
{
action(arguments);
}
您可以声明一个函数,如
onclick : function()
{
action(arguments);
}
下面是一个正在工作的JSFIDLE:
像这样:
object_array = [
{
id: "id1",
// Encapsulate in an anonymous function
onclick: function(){ load_file('filename.php'); },
},
{
id: "id2",
// Encapsulate in an anonymous function
onclick: function(){ open_url('http://url.com'); },
}
];
然后像这样把它绑起来:
$('element').click(obj.onclick);
大概您会这样使用它::
object_array.forEach(function(obj){
// Note there is no need to wrap the obj.onclick
// into another anonymous function anymore!
$("#" + obj.id).click(obj.onclick);
});
下面是一个正在工作的JSFIDLE:
以下是一个可行的JSFIDLE:
像这样:
object_array = [
{
id: "id1",
// Encapsulate in an anonymous function
onclick: function(){ load_file('filename.php'); },
},
{
id: "id2",
// Encapsulate in an anonymous function
onclick: function(){ open_url('http://url.com'); },
}
];
然后像这样把它绑起来:
$('element').click(obj.onclick);
大概您会这样使用它::
object_array.forEach(function(obj){
// Note there is no need to wrap the obj.onclick
// into another anonymous function anymore!
$("#" + obj.id).click(obj.onclick);
});
下面是一个正在工作的JSFIDLE:
您应该将对象数组重构为:
然后,您可以使用以下命令调用它:
var actions = {
load_file: function(url) {
...
},
open_url: function(url) {
...
},
...
};
object_array.forEach(function(ob) {
$("#"+ob.id).click(function() {
actions[ob.action](ob.url);
});
});
如果有更复杂的参数,还可以提供一个arguments数组,而不是url,并在函数上使用
或者,如果您只需要函数的查找表,请使用:
var object = {
"id1": function() {
load_file('filename.php');
},
"id2": function() {
open_url('http://url.com');
}
};
$('element').click(function() {
object[this.id]();
});
您应该重构对象数组以:
然后,您可以使用以下命令调用它:
var actions = {
load_file: function(url) {
...
},
open_url: function(url) {
...
},
...
};
object_array.forEach(function(ob) {
$("#"+ob.id).click(function() {
actions[ob.action](ob.url);
});
});
如果有更复杂的参数,还可以提供一个arguments数组,而不是url,并在函数上使用
或者,如果您只需要函数的查找表,请使用:
var object = {
"id1": function() {
load_file('filename.php');
},
"id2": function() {
open_url('http://url.com');
}
};
$('element').click(function() {
object[this.id]();
});
那么对象_数组是以JSON或类似格式从服务器检索的?或者它只是嵌入到代码中的一个文本?您对object_数组中的对象有控制权吗?换句话说,您能将onclick的格式更改为合理的格式吗?这样就可以用JSON或类似的格式从服务器检索object_数组了?或者它只是嵌入到代码中的一个文本?您对object_数组中的对象有控制权吗?换句话说,您能将onclick的格式更改为合理的格式吗?如果我在另一个函数中调用onclick,这是函数名{object.onclick;}吗?谢谢。如果您想调用它,那么可以像调用普通函数一样调用函数名{object.onclick;}:我的对象数组不喜欢对象中的匿名函数。它不喜欢onclick:function{load_file'filename.php';},@user823527我为您添加了一个jsfiddle链接。这在小提琴中确实有效。但是,当在click函数以外的函数中调用时,object.onclick不会完成。函数名{object.onclick;}实际上并没有运行load_file函数。如果我在另一个函数中调用onclick,这是函数名{object.onclick;}吗?谢谢。如果您想调用它,那么可以像调用普通函数一样调用函数名{object.onclick;}:我的对象数组不喜欢对象中的匿名函数。它不喜欢onclick:function{load_file'filename.php';},@user823527我为您添加了一个jsfiddle链接。这在小提琴中确实有效。但是,当在click函数以外的函数中调用时,object.onclick不会完成。函数名{object.onclick;}实际上并没有运行load_file函数。函数的查找表对我来说已经足够了。这对我来说是一个很好的解决方案。函数的查找表对我来说已经足够了。这对我来说是个好办法。