在我的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 code和got the EventListener
working here。
如何获取listcells的值?我已经尝试了一切!
答案 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);
},