2011-02-03 1 views
0

私は、ドキュメントの要素にコンテキストメニューを添付することになっているjavascriptを書いています。コンテキストメニューのjqueryプラグインには、コンテキストメニューのidとオプションオブジェクトが必要です。オプションオブジェクトには、キーがメニュー項目のIDで、値がクリック時に呼び出されるキー/値ペアを持つべきbindingsというプロパティがあります。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性質を持っていないということです。その結果、にkeyを割り当てると、空の文字列 となり、有効なプロパティ名 にはなりません。 (?)のFirebugからわずか「バギー」表示であるかもしれないhttp://jsfiddle.net/8TL7u/

+0

はい、スクリプトから削除したconsole.logは、IDとバインド[id] = idが表示されました。 – Azder

+0

空の文字列は完全に有効なプロパティ名です。ドット表記ではアクセスできません。 –

1

あなたは各liidタック場合は、それだけで正常に動作する必要があります。例:

var mytest = {}; 

var foo = function() { 
}; 

mytest['foo'] = foo; 

console.log(mytest); 

が表示されます。

Object { } 

は空のオブジェクトのように見えますが、あなたはそれをクリックした場合は、コンテンツが表示されます。

+0

私はクリックしたが、それは表示されませんでした、面白いことは、私はFirefoxを再起動し、それは魔法のように働いた。私は再びそれを再現できる場合のみ。 – Azder

+0

@Azder:面白いですが、私はこの行動をかなり頻繁にしています。 – jAndy

関連する問題