1

私のFirefoxアドオンには<listbox>. ボックス内の項目を左クリックしたときに JavaScript 関数を実行できるようにしたいと考えています。この関数は、アイテムのテキスト値を取得する必要があります。

これで、イベント リスナーの onLoad 呼び出しにこれを配置したため、をクリックすると関数が呼び出されます。listitem

    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だけで を検出することはできませんlistcell。あなたが行くことができる最も近いのは、 aclick上の aを検出することlistitemです。その後、コードを使用してドリルダウンする必要があります。

したがって、.childNodeターゲットで使用してください。には が 2 つしかないため、2 番目のセルをキャプチャしようとしている場合は、 を使用しlistcellます。`childNodes[0] は最初のセルを参照します。listitemchildNodes[1]

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 に答える