XUL Richlistbox选择问题

问题描述:

我有一个richlistbox我的Firefox扩展如下:XUL Richlistbox选择问题

<richlistbox id="accList" class="accList" seltype="single" flex="1"> 
    <richlistitem id ="accListTemplate" hidden="true"> 
     <listcell class="sessionActivate"/> 
     <listcell class="nameItem"/> 
     <listcell class="lastUsedItem"/> 
     <spacer flex="1" /> 
     <listcell class="sessionDelete" /> 
     <listcell class="sessionComplete" /> 
     <listcell class="sessionDetails" /> 
    </richlistitem> 
</richlistbox> 

通过JavaScript我克隆此richlistitem并将其添加到与我想要的值richlistbox。

结果是:

Listbox multiple selection

的项目似乎都被选中,我无法改变的选择。

另一个奇怪的是,如果我上线点击做到:

alert(document.getElementById("accList").selectedCount); 

它说0

我失去了一些东西?

隐藏与否,列表自动选择第一个项目 - 当你克隆它,你会得到它的“选择”的状态为好。最简单的解决方案:只是不要把你的模板放在<richlistbox>标签内,把它放在外面的某个地方。

+0

谢谢。这很好。 – 2013-05-15 08:14:50

由于您克隆列表中的第一个项目的方式,您会从该项目中获得一些您并不期待的额外属性。像这样的列表中的第一项继承这些属性。

在您的克隆代码中,删除属性selectedcurrent,然后再将其添加到列表中。

例子:

var newtemplate = document.getElementById("accListTemplate").cloneNode(true); 
newtemplate.removeAttribute("hidden"); 
newtemplate.removeAttribute("id"); 
newtemplate.removeAttribute("current"); 
newtemplate.removeAttribute("selected"); 
// do your content manipulation 
document.getElementById("accList").appendChild(newtemplate); 
+0

感谢您的回答。这很好,但我最终使用弗拉基米尔在其他答案上写的方式。 – 2013-05-15 08:20:02