如何在JavaScript中使用括号符号将函数附加到对象?
我正在编写一个javascript,它应该将上下文菜单附加到文档中的元素。上下文菜单的jquery插件需要上下文菜单的id和选项对象。options对象有一个名为bindings的属性,该属性应具有键/值对,其中键是菜单项的id,值是单击时调用的函数 问题是,我尝试填充的bindings对象在使用括号概念时没有将函数作为值附加,我需要它,因为菜单项的id不能预先确定如何在JavaScript中使用括号符号将函数附加到对象?,javascript,function,object,Javascript,Function,Object,我正在编写一个javascript,它应该将上下文菜单附加到文档中的元素。上下文菜单的jquery插件需要上下文菜单的id和选项对象。options对象有一个名为bindings的属性,该属性应具有键/值对,其中键是菜单项的id,值是单击时调用的函数 问题是,我尝试填充的bindings对象在使用括号概念时没有将函数作为值附加,我需要它,因为菜单项的id不能预先确定 var bindings = {}; var bindingsFunction = function(t){
var bindings = {};
var bindingsFunction = function(t){
alert('Trigger was ' + t.id + '\nAction was Open');
};
var $listItems = $contextMenu.find('li');
$listItems.each(function(index, item){
var key = '' + item.id;
bindings[key] = bindingsFunction;
});
console.log('bindings is empty', bindings);
var result = $icon.contextMenu(contextMenuId, {
bindings: bindings
});
您没有包括脚本正在处理的HTML,但我猜正在选择的
li
元素没有id
属性。因此,当您将item.id
分配给key
时,它是一个空字符串,因此不是有效的属性名称
如果在每个li
上添加id
,它应该可以正常工作:这可能只是Firebug的“buggy”(?)显示。例如:
var mytest = {};
var foo = function() {
};
mytest['foo'] = foo;
console.log(mytest);
将显示:
Object { }
看起来像是一个空对象,但如果你点击它,你会看到内容。它在Chrome中工作,所以我记得我正在使用Firefox4测试版,所以我刚刚重新启动Firefox,它神奇地工作了。如果我能再次复制它,我将能够提供更多细节。我确实单击了,但没有显示,有趣的是,我重新启动了Firefox,它神奇地工作了。只有当我能再次复制它时才行。@Azder:有趣的是,我经常有这种行为。是的,我从脚本中删除的console.log确实显示了id,并且绑定[id]=id也起作用。空字符串是一个完全有效的属性名,不能用点符号访问它。