2011-09-25 101 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'); 
    });