我是新来的JQuery和一般的web开发。我试图从XML文件加载一些数据并构建一个无序列表。我有这部分工作,现在我试图使用TreeView插件,所以我可以折叠/展开数据。该数据被加载这样的:JQuery Treeview不能与Ajax一起工作
$(document).ready(function(){
$.ajax({
type: "GET",
url: "solutions.xml",
dataType: ($.browser.msie) ? "text" : "xml",
success: function(data) {
var xml;
if (typeof data == "string") {
// Work around IE6 lameness
xml = new ActiveXObject("Microsoft.XMLDOM");
xml.async = false;
xml.loadXML(data);
} else {
xml = data;
}
list = ""
$(xml).find("Group").each(function() {
group = $(this).attr("name");
list += "<li><span>" + group + "</span><ul>";
$(this).find("Solution").each(function() {
solution = $(this).attr("name");
list += "<li><span>" + solution + "</span></li>";
});
list += "</ul></li>";
});
$("#groups").html(list);
},
error: function(x) {
alert("Error processing solutions.xml.");
}
});
$("#groups").treeview({
toggle: function() {
console.log("%s was toggled.", $(this).find(">span").text());
}
});
});
和HTML看起来像这样:
<html>
...
<body>
<ul id="groups">
</ul>
</body>
</html>
无序列表显示正常,但小[+]和[ - ]迹象显示不出来并且这些部分不可折叠/可展开。如果我摆脱了我的Ajax加载并手动在#groups中插入无序列表,它按预期工作。
我在做什么错?有没有其他插件或JavaScript库可以使这更容易?该解决方案需要在本地使用IE6(即web服务器)。
更新:我发现了一个解决方法:如果我这样定义我的树视图东西,它的工作原理:
function makeTreeview() {
$("#container").treeview({
toggle: function() {
console.log("%s was toggled.", $(this).find(">span").text());
}
});
}
setTimeout('makeTreeview();', 50);
我认为这个问题是,当我创建树视图,阿贾克斯的东西不是招”完成它的工作,所以当treeview()被调用时,无序列表还没有被创建。我还没有用IE6测试过。有没有更好的方法来做到这一点,而不使用SetTimeout()?
谢谢吉姆,这看起来我在找什么。大约50ms时,我在IE6测试时不得不增加这个速度,因为它速度很慢。我会明天测试这个,如果它有效,请将你的答案标记为正确。 – 2009-04-23 02:48:53