我从jshint或控制台没有收到此代码的错误。然而,我的ajax内容并未发布到预期的div。但是,警报会触发:
var recentVar;
var highlightsVar;
var test3;
var test4;
function switcher(divToShow, thisVar, otherVar, url, div){
$("#site-nav li a").parents().removeClass("nav-active");
$(div).addClass("nav-active");
if (otherVar){ $(otherVar).detach();}
if(typeof thisVar === 'undefined') {
thisVar = $(divToShow + " ul.top-level").load("assets/includes/" + url, function () {
alert("I'm new");
});
} else {
$(thisVar).appendTo("#content-listing");
alert("I'm old");
}
}
//Recent
$("#site-nav .nav1").on("click", function (event) {
switcher("#recent", "recentVar", "highlightsVar", "recent.php", "#site-nav .nav1");
event.preventDefault();
});
//Highlights
$("#site-nav .nav2").on("click", function (event) {
switcher("#highlights", "highlightsVar", "recentVar", "all-web.php", "#site-nav .nav2");
event.preventDefault();
});
答案 0 :(得分:4)
执行切换器后,thisVar将始终为字符串。它永远不会有未定义的类型。它也看起来像你想要传入一个对象(由于声明的变量)但是...如上所述,你总是传入一个字符串。
[根据James Montagne的评论]
答案 1 :(得分:3)
它与AJAX无关,但我认为你的问题就在这里。
$(thisVar)
thisVar
只是文字。如果您检查,您会看到$(thisVar).length
为0.这是因为您正在调用:$("recentVar")
,它将搜索<recentVar></recentVar>
类型的任何元素,这些元素显然没有。如果您的意图是附加该文本,则可以使用append
或创建元素并将文本设置为recentVar
并附加该文本。
编辑:另一个问题:
$(divToShow + "ul.top-level")
你需要一个空间:
$(divToShow + " ul.top-level")
否则你试图匹配#recentul.top-level
,这是无意义的。
答案 2 :(得分:0)
试试这个:
if(typeof thisVar === 'undefined') {
thisVar = $(divToShow + " ul.top-level").load("assets/includes/" + url, function () {
alert("I'm new");
});
} else {
$(thisVar).appendTo($("#content-listing"));
alert("I'm old");
}
答案 3 :(得分:0)
AMAIK,jQuery&#39; load()
方法直接将结果插入到调用对象中。因此,结果应该加载到$(divToShow + " ul.top-level")
元素中。你检查过了吗?
答案 4 :(得分:0)
如果当前文档不包含ID为divToShow + " ul.top-level"
的元素,则不会执行.load()
方法。
尝试使用Firebug或类似的东西来跟踪请求。也许你的回答出了问题。