如何从列表框列表项中获取价值

时间:2013-02-28 15:35:34

标签: javascript firefox-addon

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

现在,当我点击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

的正确句柄

我从这里gotten the original codegot the EventListener working here

如何获取listcells的值?我已经尝试了一切!

2 个答案:

答案 0 :(得分:1)

您正在使用此代码:

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

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

while (target && target.localName != "listcell"){
    target = target.parentNode;
}
alert(target.getAttribute("value"));

答案 1 :(得分:0)

您无法仅在click上检测到listcell。您最接近的是检测click上的listitem。之后,您必须使用代码向下钻取。

因此,在目标上使用.childNode。由于listcell中只有两个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);      
},