-1

我有这些功能:

    createTreeItem: function (num, val)
    {
        const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";

        var i = document.createElementNS(XUL_NS, "treeitem");
        var r = document.createElementNS(XUL_NS, "treerow");
        var c1 = document.createElementNS(XUL_NS, 'treecell');
        var c2 = document.createElementNS(XUL_NS, 'treecell');
        var c3 = document.createElementNS(XUL_NS, 'treecell');

        i.setAttribute("container", true);
        i.setAttribute("open", true);

        c1.setAttribute("label", num);
        c2.setAttribute("label", val);
        c3.setAttribute("value", false);

        r.appendChild(c1); 
        r.appendChild(c2);
        r.appendChild(c3);

        i.appendChild(r);
        i.addEventListener("click", test, false);

        return i;
    } 

    test: function ()
    {
        alert("zero");
    }

    func: function (liste)
    {
        try
        {
            root = document.getElementById("treeRoot");
            var current;

            for(o in liste)
            {
             current = createTreeItem(liste[o].id, liste[o].nom_scenario);
             root.appendChild(current);
            }       
        }
        catch(e)
        {
        alert(e);
        }
    }

我正在树中创建元素,我想在创建的每个元素上添加事件侦听器。问题是什么都没有发生。在代码中,Liste 是一个 json 请求的响应。它包含我想在我的 xul 文件中创建的所有元素。

4

1 回答 1

0

我对这种语法不是很熟悉,但我敢打赌,测试函数不会因为它的定义方式而被“提升”。尝试将“test”函数移到“createTreeItem”函数之上,或者像这样定义测试:

function test() {
   ...
}

这样,当它被评估时,它将被“提升”到顶部,这样当您尝试将其添加为单击事件的操作时,它将被定义。不是 100% 确定这是正确的,但如果我不得不打赌……

于 2013-04-20T18:03:16.553 回答