Firefox addon 如何对listitem双击做出反应并为每个listitem添加上下文菜单?

Firefox addon 如何对listitem双击做出反应并为每个listitem添加上下文菜单?,firefox-addon,xul,Firefox Addon,Xul,我的xul中有listbox元素。元素被动态地添加到那里 我怎样才能: 双击每个列表项 为每个列表项实施上下文菜单 在创建listitems的过程中,我知道添加到其中的每个记录的唯一id(数字)。理想情况下,当调用双击函数并选择上下文菜单项时,我应该获得此id(用户不应该看到它)。事件气泡,这意味着您可以在元素上注册事件处理程序事件。目标允许您查找元素: listbox.addEventListener(“dblclick”,函数(事件) { var target=event.target; w

我的xul中有
listbox
元素。元素被动态地添加到那里

我怎样才能:

  • 双击每个
    列表项
  • 为每个
    列表项实施上下文菜单

  • 在创建
    listitem
    s的过程中,我知道添加到其中的每个记录的唯一id(数字)。理想情况下,当调用双击函数并选择上下文菜单项时,我应该获得此id(用户不应该看到它)。

    事件气泡,这意味着您可以在
    元素上注册事件处理程序<代码>事件。目标允许您查找
    元素:

    listbox.addEventListener(“dblclick”,函数(事件)
    {
    var target=event.target;
    while(target&&target.localName!=“listitem”)
    target=target.parentNode;
    如果(!目标)
    return;//事件目标不是列表项
    警报(target.getAttribute(“recordId”);
    },假);
    
    这假设您在将属性添加到列表中之前,已经向列表项添加了
    recordId
    属性

    上下文菜单的工作原理类似(您将
    context=“…”
    属性添加到
    ),不同之处在于上下文菜单通常在菜单的
    弹出显示事件中初始化。此事件的目标是上下文菜单本身,因此它不会帮助您找到列表项。但是,有一种(不推荐使用的
    document.popupNode
    )可以让您执行此任务:

    menu.addEventListener(“弹出显示”,函数(事件)
    {
    var target=event.target.triggerNode;
    while(target&&target.localName!=“listitem”)
    target=target.parentNode;
    如果(!目标)
    return event.preventDefault();//不显示没有列表项的上下文菜单
    警报(target.getAttribute(“recordId”);
    },假);
    
    谢谢,瓦拉迪米尔。这么简单。只是小小的更正-
    listItem
    在您的代码中应该被
    target
    @BGM替换:虽然我看不出它与我的答案有什么关系,但问题很明显-
    listbox
    变量未定义;)@Wladimirplant-它只与我来这里寻找相同答案的答案有关(因此我不能问相同的问题),但我不知道如何在我的案例中应用它。我知道
    listbox
    未定义,但为什么<代码>窗口。AddEventListener
    工作正常。@WladimirPalant我在这里解决了启动它的问题:但是在尝试检索属性值时挂断了,就像您在回答中所示。以下是我的相关问题: