2013-05-10 70 views
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)语句有什么问题?是因为范围吗?

回答

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); 

    } 
}); 
+0

好的,但在这种情况下,如果否则总是会导致其他权利? – user1721135 2013-05-10 16:34:42

+1

不,因为我们还没有分配内容,所以在''undefined' == false'中是undefined。了解更多有关真假和虚假的信息。 – 2013-05-10 16:36:17

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 
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一个按钮加载内容第1点击并添加到,同一个按钮上第二仅限点击滚动所述内容。

相关问题