我有以下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
。
答案 0 :(得分:1)
如果模板使用两次,则文档中将有两个ID为directory-list-root
的元素,这是非法的。结果是事情不会奏效。
不是使用固定的id,而是每次通过递增内部计数器变量来使用动态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>