2011-02-03 85 views
0

我正在寫一個JavaScript應該附加上下文菜單到文檔中的元素。上下文菜單的jquery插件需要上下文菜單和選項對象的ID。選項對象有一個名爲綁定的屬性,該屬性應該有鍵/值對,其中鍵是菜單項的ID,該值是在單擊時調用的函數。如何使用JavaScript中的括號表示將函數附加到對象?

問題是,我試圖填充的綁定對象在使用括號概念時沒有將函數作爲值附加,並且我需要它,因爲菜單項的ID無法事先確定。

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

回答

0

它在Chrome中工作,所以我記得我正在做一個Firefox 4 Beta,所以我剛剛重新啓動Firefox,它神奇地工作。如果我能再次複製它,我將能夠提供更多細節。

0

你不包括你的腳本工作的HTML,但我的猜測是,正在選擇li元素沒有一個id財產。因此,當您將item.id指定爲key時,它是一個空字符串 ,因此不是有效的屬性名稱

如果每個li釘的id,它應該只是罰款:http://jsfiddle.net/8TL7u/

+0

是的,我從腳本中刪除的console.log確實顯示了id,也綁定了[id] = id工作。 – Azder 2011-02-03 11:56:35

+0

空字符串是一個完全有效的屬性名稱,它只是不能用點符號訪問。 – 2011-02-03 13:50:27

1

這可能只是一個「馬車」顯示,從螢火蟲(?)。例如:

var mytest = {}; 

var foo = function() { 
}; 

mytest['foo'] = foo; 

console.log(mytest); 

顯示:

Object { } 

看起來像一個空的對象,但如果你點擊它,你會看到的內容。

相關問題