1

我正在使用 JQUery treeview 插件将我的数据显示为树结构。问题是我从 JSON 响应对象动态生成我的 HTML。这永远不会按预期工作。元素没有为点击事件注册。

如果我对动态 HTML 进行硬编码,我可以看到预期的结果。我调试并了解 JQuery 注册了现有 HTML 元素的点击事件,但不是动态形成的元素。请让我知道如何为他们注册点击事件。

function show(jsonResp) {
    //Parsing the JSON response and building HTML on the fly.

    $red = '';
    for (var i = 0; i < treeElements.length; i++) {
        $red = $red + treeElements[i];
    }

    $("#user-records").append($red);
    $("#red").treeview({
        animated: "fast",
        collapsed: true,
        unique: true,
        persist: "cookie",
        toggle: function () {
            window.console && console.log("%o was toggled", this);
        }
    });

}

此树视图代码根据用户单击事件调用函数以展开和折叠。所有这些事件都在 treeview.js 中注册

 this.find("div." + CLASSES.hitarea).click( toggler );

我在 chrome 中进行了调试,并检查了我的新 div 是否已经注册了点击事件。但是当我点击时什么都没有发生。

PS:如果我复制生成的 HTML 元素的控制台日志,并创建一个不同的页面,它会完美运行。唯一的问题是动态添加 HTML 代码时。我不知道在哪里为这个新添加的动态 HTML 代码注册点击事件。

4

2 回答 2

2

这是你做的吗?

$(document).on("click", ".selector", function() {
   // your code
});

使用此代码,您可以在生成的内容上绑定事件。这是一个例子:http: //jsfiddle.net/cB8Tf/

于 2013-09-24T02:44:18.683 回答
1

改变这个

this.find("div." + CLASSES.hitarea).click( toggler );

对此

$(document).on('click', "div." + CLASSES.hitarea, toggler);

这将导致所有未来的实例都"div." + CLASSES.hitarea尊重您提供的点击处理程序。

于 2013-09-24T18:00:51.000 回答