2013-04-28 48 views
0

我在这里是新的,并期待看看我能否得到答案。变量工作if语句,但不是单击函数

为什么变量适用于第一条if语句,而不是click函数?

var Page = $.cookie('Page') 

$(function() { 

    if (Page == '0') $('.mainmenu #active').addClass('disable'); 

    $('.pageback').click(function() { 
     if (Page == '1') $('.mainmenu #active').addClass('disable'); 
    }); // disable menu navigation 

    $('.pagenext').click(function() { 
     if (Page == '0') $('.mainmenu #active').removeClass('disable'); 
    }); // disable menu navigation 
}); 
+0

而你声称'页面'在点击函数中是未定义的,但不在它们之外? – adeneo 2013-04-28 22:16:17

+0

是不是因为你在使用它之后没有真正设置变量? – mattytommo 2013-04-28 22:16:42

+0

该变量似乎适用于最初的if语句。但是当点击返回和pagenext时,它将不会运行。 – user2330185 2013-04-28 22:17:30

回答

0

Page变量从cookie中分配一次。

var Page = $.cookie('Page') 

但是,从未改变因此直到cookie将被改变页面被刷新的值将保持不变。也就是说,对Page变量的赋值仅在评估时才会发生。它相当于说var Page = 'x'其中x是在给定时间点cookie的值。


虽然这时候 cookie将被更新的静止将不会更新类(cookie的需要设置和然后点击需要发生),可以考虑使用可用于功能推迟评估而不是变量。另请注意其他更改。

$(function() { 

    function pageNo() { 
     return parseInt($.cookie('Page'), 10) || 0; 
    } 

    var menu = $('.mainmenu #active'); 

    if (pageNo() == 0) menu.addClass('disable'); 

    $('.pageback').click(function() { 
     if (pageNo() == 1) menu.addClass('disable'); 
    }); // disable menu navigation 

    $('.pagenext').click(function() { 
     if (pageNo() == 0) menu.removeClass('disable'); 
    }); // disable menu navigation 
}); 

为了保证类改变 cookie的变化,jQuery的事件可能是有用的(没有cookie的插件默认支持任何?)来触发更新。我使用KnockoutJS并发现它使这种依赖关系管理变得容易。

+0

好吧,这很有道理..谢谢你 – user2330185 2013-04-28 22:24:52