如果var not set总是导致true,即使它是set

时间:2013-05-10 16:31:00

标签: javascript jquery ajax if-statement

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

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

3 个答案:

答案 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加载内容并附加,第二次点击同一个按钮只滚动到所述内容。