2012-07-06 69 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'); 
    }); 

});