2012-07-06 65 views
0

首先抱歉,我有点在jQuery初学者。Jquery变更类与饼干问题

我的问题是,即时通讯尝试使用jquery cookie制作类切换器。

它工作正常只有一个问题。 当我在主页上选择作业时,每个作业都有一个唯一的ID,并且旁边有一个按钮,当用户点击它时,它会将其保存到收藏夹中,再次将其删除。 如果它保存按钮cganges黄色,如果删除变为蓝色。

我能够保持课后页面刷新,但我的问题是我真的不能解决的是,如果我有更多的工作列出点击它保持类,我添加一个nother它从类中删除类其他并添加它点击什么,所以它不保持多个只有一个。

可以请别人给我一个提示?

我的代码:

HTML

<a href="#" id="<?php echo $res->info_id; ?>" class="favorite btn btn-primary btn-mini" title="Add to favorite"> 
    <i class="icon-star icon-white"></i> 
</a> 

jQuery的

(function() { 

//save to favorites 
$('.favorite').on('click', function(e){ 
    e.preventDefault(); 
    var data = [], 
    newclass = 'btn-warning', 
    oldcalss = 'btn-primary', 
    fav = $(this); 
    favId = fav.attr('id'), 

    $.ajax({ 
     type: "POST", 
     url: base_url + 'ajax/add_favorite/' + favId, 
     data: favId, 
     dataType: "json", 
     success: function(data) { 
     if(data.status == "removed"){ 
      $.cookie('keepClass', 'btn-primary'); 
      $.cookie('jId', favId); 
      fav.removeClass(newclass) 
      .addClass($.cookie('keepClass')) 
      .attr("title", "Add to favorites"); 
     } else { 
      $.cookie('keepClass', 'btn-warning'); 
      $.cookie('jId', favId); 
      fav.removeClass(oldcalss) 
      .addClass($.cookie('keepClass')) 
      .attr("title", "Remove from favorites");; 
     } 
     } 
    }); 
}); 

$('#' + $.cookie('jId')).attr('class', "btn btn-mini " + $.cookie('keepClass')); 

})(jQuery); 

谢谢

+1

你看上去'每次覆盖'$ .cookie(“JID”) - 我建议将其存储在该cookie的一个逗号分隔的列表。 – ClarkeyBoy 2012-07-06 06:41:40

+0

如果它不是一个很大的请求,你能给我一个例子吗? – Side 2012-07-06 06:45:27

+0

我认为@ClarkeyBoy想说的是:不是只在Cookie中存储一个Id,而是存储多个Id。所以,你的行为可能是:i)如果'id1'被点击,检查它是否在cookie中(值是一个列表),如果是 - 什么都不做,否则将'id1'添加到cookie jId中的值列表。在用户选择带有id1,id5和id8的按钮后,您的cookie值将看起来像'id1,id5,id8'。当用户再次按下按钮id8(取消选择)时,新的cookie值应该是id1,id5 [id8应选择性地移除] – 2012-07-06 06:58:21

回答

0

首先感谢大家的replyes,我给大家一个给予好评,但是今天我坐了下来,并用管理我的逻辑去做。

var cookieName = 'fav_'; 
$('.favorite').each(function(){ 
    var id = $(this).attr('id'), cookie = cookieName + id; 
    if($.cookie(cookie) !== 'save'){ 
     $(this).addClass('btn-primary'); 
    } else if($.cookie(cookie) !== 'remove') { 
     $(this).addClass('btn-warning'); 
    } 

}).on('click', function(e){ 
    e.preventDefault(); 
    var fav = $(this); 
    var id = fav.attr('id'); 

    $.ajax({ 
     type: "POST", 
     url: base_url + 'ajax/add_favorite/' + id, 
     data: id, 
     dataType: "json", 
     success: function(data) 
     { 
      if(data.status == "removed") 
      { 
       $.cookie(cookieName + $(fav).attr('id'), 'remove'); 
       $(fav).removeClass('btn-warning').addClass('btn-primary'); 
      } else { 
       $.cookie(cookieName + $(fav).attr('id'), 'save'); 
       $(fav).removeClass('btn-primary').addClass('btn-warning'); 
      } 
     } 

    }); 

}); 

再次感谢您对所有

1

您需要存储喜欢的工作持续使用Cookie的列表。为了存储我们在javascript中使用数组的项目列表,但不幸的是,您可以只保存cookie中的字符串。

存储在cookie值的列表类似的问题已经被问和回答了在这里看到how to store an array in jquery cookie?

实现的是,创建一个名为“favList名单,

var list = new cookieList("favList"); 

现在你应该”将'作业的ID'添加到'favList'中以使其成为'fav'。

list.add(favId); 
list.remove(favId); 

当页面加载,检索通过他们对列表进行迭代,并标记所有的收藏物品与你的类,如果你想标记所有项目不在列表中添加你的逻辑。

$(document).ready(function(){ 
    var list = new cookieList("favList"); //no need to create this again for click logic 
    $.each(list.items() , function(index, value){ 
    $('#' + value).addClass('iAmAFavItem'); 
    }); 

});