イベントバブルとは、イベントハンドラを<listbox>
要素に登録できることを意味します。
listbox.addEventListener("dblclick", function(event)
{
var target = event.target;
while (target && target.localName != "listitem")
target = target.parentNode;
if (!target)
return; // Event target isn't a list item
alert(target.getAttribute("recordId"));
}, false);
これは、あなたがリストに追加する前に、あなたのリスト項目へrecordId
属性を追加したことを前提としていますevent.target
あなたが<listitem>
要素を見つけることができます。
コンテキストメニュー(context="..."
属性を<listbox>
に追加)と同様に動作しますが、メニューのpopupshowing
イベントでコンテキストメニューが通常初期化されるという違いがあります。このイベントのターゲットはコンテキストメニューそのものなので、リスト項目の検索には役立ちません。
menu.addEventListener("popupshowing", function(event)
{
var target = event.target.triggerNode;
while (target && target.localName != "listitem")
target = target.parentNode;
if (!target)
return event.preventDefault(); // Don't show context menu without a list item
alert(target.getAttribute("recordId"));
}, false);
おかげで、ウラジミール:しかし、あなたが仕事をすることができます
menupopup.triggerNode()
property(非推奨document.popupNode
に近代的な選択肢)があります。とても簡単。小さな修正 - あなたのコードの 'listItem'は' target'に置き換えてください。 –@BGM:ここで私の答えにどのように関連しているのかは分かりませんが、問題は明らかです - 'listbox'変数は定義されていません;) –
@WladimirPalant - これは私がここで同じことを探していた答え(私は同じ質問をすることはできません)しかし、私は私の場合にそれを適用する方法を把握することはできません。 'listbox'は定義されていませんが、なぜですか? 'window.addEvenListener'は正常に動作します。 – bgmCoder