不知道如何制定这个,但在这里。
我正在检查var是否存在(内容),如果它没有设置它。
问题是下一次点击,它仍然表现得好像没有var内容。但为什么??
这是我的代码:
$("#nav a").click(function(event) {
event.preventDefault();
var href = $(this).attr("href");
var load = href + " .content";
if (!content)
{
var content = $('<div>').load(load);
$(".content").append(content);
}
else
{
var position = content.offset();
$(document).scrollTop(position);
}
});
它永远不会导致其他结果,所以总是点击一下整个加载和追加函数重复。
基本上我怎么能记录这个特定链接的内容已被加载一次,所以else函数应该在下次执行?
另外,我的if(!content)语句出了什么问题?是因为范围?
答案 0 :(得分:3)
在Javascript函数中确定对象的范围。您需要将内容放在全局范围内。目前它是在分配给click事件处理程序的匿名函数中创建的,因此当再次执行该函数时,内容超出范围,导致它返回false。
var content;
$("#nav a").click(function(event) {
event.preventDefault();
var href = $(this).attr("href");
var load = href + " .content";
if (!content)
{
content = $('<div>').load(load);
$(".content").append(content);
}
else
{
var position = content.offset();
$(document).scrollTop(position);
}
});
答案 1 :(得分:2)
尝试将var content
作为全局变量而不是本地变量,就像您现在正在做的那样。这就是if (!content)
结果为真的原因,如:
var content;
$("#nav a").click(function (event) {
event.preventDefault();
var href = $(this).attr("href");
var load = href + " .content";
if (!content) {
content = $('<div>').load(load);
$(".content").append(content);
} else {
$(document).scrollTop(content.offset());
}
});
只是为了说明当content
的值首先没有设置然后再次设置时会发生什么:
var content;
console.log(content); // undefined
console.log(!content); // true
content = 'text';
console.log(content); // text
console.log(!content); // false
答案 2 :(得分:0)
感谢大家回答有关检查var是否存在的第一个问题。
我最终放弃了整个概念,结果是
one()
功能是我一直需要的。为了只对所有后续点击执行一次函数和另一个函数。
这是:
$(document).ready(function() {
//Ajaxify Navi
$("#nav a").one("click", function(event) {
event.preventDefault();
var href = $(this).attr("href");
var load = href + " .content";
var content = $('<div>').load(load);
$(".content").append(content);
$(this).click(function(event) {
event.preventDefault();
var position = content.offset().top;
$(document).scrollTop(position);
$("body").append(position);
});
});
});
这是以下内容:
首先点击一个按钮,通过ajax加载内容并附加,第二次点击同一个按钮只滚动到所述内容。