2013-02-28 4 views
1

В моем приложении firefox у меня есть <listbox>. Я хочу иметь возможность работать с функцией javascript, когда я левой кнопкой мыши на элементе в поле. Функция должна извлекать текстовое значение элемента.Как получить значение из списка listitem

Теперь моя функция делает дозвонились, когда я нажимаю на 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.

Как я могу получить значение списков? Я пробовал все!

ответ

0

Вы не можете обнаружить click на просто listcell. Самое близкое, что вы можете пойти, это обнаружить click на listitem. После этого вам нужно развернуть код.

Итак, используйте .childNode на вашей цели. Поскольку у вас есть только два listcell s в вашем 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);  
}, 
1

Вы используете этот код:

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

Он будет идти от реальной цели щелчка ищет <listitem> тега. Тем не менее, текст не хранится в <listitem> тега, это в <listcell> - так что вы просто должны искать, что один в иерархии:

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

Thanks, Wladimir. Это имеет смысл для меня. Я все еще здесь учился. Теперь, однако, нет никакого предупреждения. Однако функция IS стреляет, и если я прокомментирую часть 'if (! Target)', консоль ошибок сообщит мне, что она 'null'. Но похоже, что это всегда 'null', потому что после этого ничего не срабатывает. – bgmCoder

+0

У вас есть еще одна подсказка для меня? – bgmCoder

+0

Ах! Проблема в том, что целью является 'listitem' не' listcell'. – bgmCoder

Смежные вопросы