我有listbox
在我的XUL元素。 listitem
元素被动态地添加那里。
我怎样才能:
- 对每个双击反应
listitem
? - 实现每个上下文菜单
listitem
?
在listitem
的创作,我知道唯一的ID(数字)的每个记录补充说。 理想的情况是,当双击函数被调用,并选择上下文菜单项时,我应该得到这个ID(和它不应该是对用户可见)。
我有listbox
在我的XUL元素。 listitem
元素被动态地添加那里。
我怎样才能:
listitem
? listitem
? 在listitem
的创作,我知道唯一的ID(数字)的每个记录补充说。 理想的情况是,当双击函数被调用,并选择上下文菜单项时,我应该得到这个ID(和它不应该是对用户可见)。
事件气泡,这意味着可以在上注册事件处理程序<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);