0

我有以下 Smary 模板(它是一个文件树,文件分别填充,然后list_html分配给 geberated 文件树 hrml)

<script>
    $("#directory-list-root").on("click", "div.content", function() {
        $("div.selected", "#directory-list-root").removeClass("selected");
        $(this).addClass("selected");

        // Check if directory is expanded
        var node = $(this).parent("li.directory");
        if (node.hasClass("expanded")) {
            node.removeClass("expanded");
            $(this).siblings("ul.container").hide();
        } else {
            node.addClass("expanded");
            $(this).siblings("ul.container").show();
        }
    } );
</script>

<div id="directory-list-root">
    <ul class="container" style="padding:5px" id="tree">
{$list_html}
    </ul>
</div>

在代码中它被使用了两次(在一个接一个显示的 jquery-ui 对话框中)。问题是第一次处理功能还可以,但第二次点击处理程序不起作用。如果我从第一个对话框中删除树,则分配第二个对话框中的处理程序。

你知道怎么解决吗?

先感谢您!

PS。如果这很重要,我正在运行 Smarty 3.1.13

4

1 回答 1

1

如果模板被使用了两次,文档中会有两个带有iddirectory-list-root的元素,这是非法的。结果是事情不会发生。

不是使用固定的 id,而是通过每次递增一个内部计数器变量来使用动态的,例如使用{counter}

<script>
    $(function() {
        {counter name=tree assign=uniqueId}
        var $root = $("#directory-list-root-{$uniqueId}");

        $root.on("click", /* etc */);
    });
</script>

<div id="directory-list-root-{$uniqueId}">
    <ul class="container" style="padding:5px" id="tree">
{$list_html}
    </ul>
</div>
于 2013-09-27T08:09:23.920 回答