我正在尝试将子菜单添加到动态构建的弹出菜单中,当您右键单击浏览器窗口中的任意位置时,该菜单会出现。第一个级别构建正常,但是当我尝试向这些条目添加弹出窗口时,菜单项会消失。
这是我正在构建的对象:
var snpshot = {
'Head':'',
'Subhead':'',
'Date':'',
'Url':'',
};
这是我的onLoad事件中存储的代码,因此在浏览器启动时构建菜单:
似乎不起作用的部分是rclickItem.appendChild(mPopup) - 它正在做'某事'但弹出窗口添加的菜单条目变为空白并缩小,但滚动它上方的光标似乎暗示它们仍在那里。
onLoad: function() {
var mainPop = document.createElementNS(XUL_NS, "menupopup");
mainPop.setAttribute('id', 'rclickMenu_MenuPopupContainer');
//attach it to main rclick object
var mainRclick = document.getElementById("rclickMenu_Main");
mainRclick.appendChild(mainPop);
mainOverlay.createMainRclick(); //THIS WORKS
//add popups -- AS SOON AS THE POPUPS ARE ADDED THE ENTRIES DISAPPEAR!
mainOverlay.createPopUpMenus();
},
createMenuItem: function(lblToUse){
//create the XUL menuitem
var itemToAdd = document.createElementNS(XUL_NS, "menuitem");
itemToAdd.setAttribute('label',lblToUse);
itemToAdd.setAttribute('id','rclickMenu_'+lblToUse);
return itemToAdd;
},
createMenuPopup: function(idToUse){
var mPopup = document.createElementNS(XUL_NS, "menupopup");
mPopup.setAttribute('id','rclickMenuPopup_' + idToUse );
return mPopup;
},
createMainRclick: function(){
for (var property in snpshot){
var mItem = mainOverlay.createMenuItem( property );
var mainPop = document.getElementById("rclickMenu_MenuPopupContainer");
mainPop.appendChild(mItem);
}
},
createPopUpMenus: function(){
for (var property in snpshot){
var mPopup = mainOverlay.createMenuPopup( property );
var rclickItem = document.getElementById("rclickMenu_"+property);
rclickItem.appendChild(mPopup);
}
},
和XUL(这是右键单击时出现的主要弹出窗口,添加了我的菜单项(我在js中动态添加)
<menupopup id="contentAreaContextMenu">
<menu
id="rclickMenu_Main"
label="Main Section">
</menu>
</menupopup>
答案 0 :(得分:2)
它可以放在
内menu
,menulist
,toolbarbutton
或button
请注意<menuitem>
标记不在该列表中。事实上,您的<menupopup>
代码的父母应该是<menu>
代码 - 然后您将获得一个子菜单(请参阅documentation)。 <menuitem>
标记始终是单个菜单项。
供参考,将<menupopup>
添加到<menuitem>
标记时会发生什么:此标记会替换自动生成的<menuitem>
内容。 <menupopup>
不是视觉元素,所以你得到的是一个没有任何可见内容的菜单项。