我的xul中有listbox
个元素。 <{3}}元素会动态添加。
我怎么能:
listitem
?listitem
实现上下文菜单?在listitem
创建期间,我知道在那里添加的每条记录的唯一ID(数字)。理想情况下,当调用双击函数并选择上下文菜单项时,我应该得到这个id(并且它不应该对用户可见)。
答案 0 :(得分:2)
事件冒泡意味着您可以在<listbox>
元素上注册事件处理程序。 event.target
允许您找到<listitem>
元素:
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
属性添加到列表项中,然后再将其添加到列表中。
事情与上下文菜单的工作方式类似(向context="..."
添加<listbox>
属性),区别在于上下文菜单通常在菜单的popupshowing
事件中初始化。此事件的目标是上下文菜单本身,因此它无法帮助您查找列表项。但是,有一个menupopup.triggerNode()
property(已弃用的document.popupNode
的现代替代品)可以帮助您完成工作:
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);