如何在列表项双击作出反应,并添加上下文菜单中每个列表项?(How to react on listi

2019-09-26 14:18发布

我有listbox在我的XUL元素。 listitem元素被动态地添加那里。

我怎样才能:

  1. 对每个双击反应listitem
  2. 实现每个上下文菜单listitem

listitem的创作,我知道唯一的ID(数字)的每个记录补充说。 理想的情况是,当双击函数被调用,并选择上下文菜单项时,我应该得到这个ID(和它不应该是对用户可见)。

Answer 1:

事件气泡,这意味着可以在上注册事件处理程序<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()属性 (现代替代过时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);


文章来源: How to react on listitem double click and to add context menu for each listitem?