我是新來的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