如何对listitem进行双击并为每个listitem添加上下文菜单?

时间:2012-01-12 19:14:32

标签: firefox-addon xul

我的xul中有listbox个元素。 <{3}}元素会动态添加。

我怎么能:

  1. 双击每个listitem
  2. 做出反应
  3. 为每个listitem实现上下文菜单?
  4. listitem创建期间,我知道在那里添加的每条记录的唯一ID(数字)。理想情况下,当调用双击函数并选择上下文菜单项时,我应该得到这个id(并且它不应该对用户可见)。

1 个答案:

答案 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);