2011-09-25 99 views
0

我正在爲屬性網站創建一個'收藏夾'風格的系統,用戶可以保存一個屬性以供以後查看。系統使用Jquery工作,因此頁面不必刷新。一個屬性的詳細信息頁面包含一個「添加到收藏夾按鈕」,並能正常工作:添加到收藏夾,jquery

$("#addFavorites").click(function() {  

var locationID = $("#locationID").val(); 

但是,當所有的屬性都在一個頁面上一起列出如何將我的代碼這一點,每個「添加到收藏夾」按鈕將不得不使用一個唯一的ID或東西,但不知道如何處理這個。

+0

http://stackoverflow.com/questions/10033215/add-to-favorites-按鍵 – webmaniacgr

回答

0

那麼最精確的方法將是默認的HTML-Formular。我會做一個短的:

<form ...> 
    <label for="fav1">Fav1</label> 
    <input type="checkbox" name="favorites[]" id="fav1" value="1" /> 
    <label for="fav2">Fav2</label> 
    <input type="checkbox" name="favorites[]" id="fav2" value="2" /> 
    <submit> 
</form> 

現在這是醜陋的形式,你可以使這個美麗的CSS。使用jQuery你現在總是提交表單當用戶檢查所有的複選框,如:

$('input[type=checkbox]').change(//do ajax submit); 

在AJAX文件中,您只需閱讀陣列:

foreach($_POST['favorites'] as $fav) { 
    addFavToUser($fav, $user); 
} 

這就好比只是解釋給你是一個想法,而不是整個「乾淨」的解決方案。但我希望這可以幫助你 - 如果有的話,我會很感激爲它投票;)

0

您的每個「收藏夾」將需要一個唯一的ID

... ...

然後.. $( '喜歡')點擊(函數(){

$(本).whateveryouwanttodo();

});

$(this)將包含被點擊的錨定標記。從那裏你可以得到ID,並打電話給你的AJAX帖子或任何你想要做的事情。

1

在jQuery中,您可以使用相對定位來選擇感興趣的項目。因此,例如,如果每個項目後面跟着一個收藏夾按鈕,則可以從單擊的項目遍歷DOM以查找相關項目。然後,您可以通過AJAX將其發回,以根據需要存儲更新元素以反映更新狀態。

HTML(假設你使用的造型,以顯示圖標,最喜歡的狀態)

<span class="normal" data-location="A">Location A</span> <span class="icon-favorite"></span> 

JS

$('.favorite').click(function() { 
     var data = [], 
      newClass = 'favorite', 
      oldClass = 'normal', 
      $this = $(this), 
      $location = $(this).prev('span'); 

     // if already favorited, reverse the sense of classes 
     // being applied 
     if ($location.hasClass('favorite')) { 
      newClass = 'normal'; 
      oldClass = 'favorite'; 
     } 
     data['location'] = $location.attr('data-location'); 

     $.post('/toggle_favorite', data, function(result) { 
      if (result.Success) { 
       $location.removeClass(oldClass).addClass(newClass); 
       $this.removeClass('icon-'+newClass).addClass('icon-'+oldClass); 
      } 
      else { 
       alert('could not mark as favorite'); 
      } 
     },'json'); 
    });