1

不知道如何制定这个,但它就在这里。

我正在检查一个 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) 语句有什么问题?是因为范围吗?

4

3 回答 3

3

在 Javascript 中,函数确定对象的范围。您需要将内容放在全局范围内。目前它是在分配给单击事件处理程序的匿名函数中创建的,因此当再次执行该函数时,内容超出范围导致它返回 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);

    }
});
于 2013-05-10T16:33:11.610 回答
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
于 2013-05-10T16:33:41.550 回答
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 加载内容并附加它,第二次单击同一按钮仅滚动到所述内容。

于 2013-05-10T18:45:11.270 回答