1

在我的 Firefox 插件中,我有一个<listbox>. 当我左键单击框中的项目时,我希望能够使用 javascript 函数。该函数应检索项目的文本值。

现在,当我单击 a 时,我的函数listitem被调用,因为我已将它放在事件侦听器的 onLoad 调用中:

    var myListBox = document.getElementById("myListBoxID");
    myListBox.addEventListener("click", 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);                                  //returns blank
        alert(target.id);                               //returns blank
        alert(target.getAttribute("value"));        //returns blank
        alert(target.getAttribute("text"));     //returns blank
        alert(target.getAttribute("id"));           //returns blank

        var targetid = document.getElementById(target.id);
        alert(targetid);                                //returns null
    }, false);      
},

xul 是这样的:

<listbox id="listbox1">
    <listcols /><listcol flex="1"/><listcol flex="1"/></listcols>
    <listitem><listcell class="column1" label="label1" value="value1"</listcell><listcell label="cell1"></listcell></listitem>
    <listitem><listcell class="column2" label="label2" value="value2"</listcell></listitem><listcell label="cell2"></listcell>
</listbox>

但是,我无法让它显示项目的文本。如您在上面看到的,我似乎没有正确处理target

我从这里得到了原始代码,并EventListener这里工作

如何获取列表单元的值?我什么都试过了!

4

2 回答 2

1

您正在使用此代码:

while (target && target.localName != "listitem"){
    target = target.parentNode;
}

它会从寻找<listitem>标签的实际点击目标上升。然而文本没有存储在<listitem>标签中,它在<listcell>- 所以你应该在层次结构中寻找那个:

while (target && target.localName != "listcell"){
    target = target.parentNode;
}
alert(target.getAttribute("value"));
于 2013-03-03T22:46:45.267 回答
0

您无法click仅在 a 上检测 a listcell。最接近的方法是检测 aclick上的 a listitem。之后,您必须使用代码进行深入研究。

所以,.childNode在你的目标上使用。由于您的 中只有两个listcells listitem,因此如果您要捕获第二个单元格,请使用childNodes[1]. `childNodes[0] 将引用第一个单元格。

onLoad: function(){
    var mylistbox= document.getElementById("mylistboxID");
    mylistbox.addEventListener("click", function(event){
        var target = event.target.childNodes[1];
        if (!target){
            return;   // In case there is not target
        }
        alert(target.getAttribute("label") + target.getAttribute("label"));
    }, false);      
},
于 2013-03-07T02:25:28.197 回答