在while循环中处理div

时间:2011-03-16 19:11:50

标签: php javascript jquery loops html

我有一个while循环显示来自数据库的数据项,我想分开处理每个项目,但我得到的只是第一个div,对于每次迭代,我想采用当前迭代的'id'并处理有了它,它在facebook中看起来像'喜欢',当我点击第一个'喜欢'时,一个jquery运行一个$.post(..)函数,一切都很顺利:用这个id完成的处理, 但当我点击其他下一个'喜欢的帖子时,方法仍然发送第一个id(由firebug签出), 代码:

<script type='text/javascript>
  $("#like").click(function(){
    $.post("done.php",
      {id:$("#id").val()},
      function(data){
        ...
      });
   });
</script>

<body>
$result = myqsl_query("select * from ...");
while($fetch = mysql_fetch_array($result){
..
echo "<input id='id' value='$fetch[0]'>
<a href='...' id='like'>like</a>";
..
</body>

我希望我成功地描述了这个问题! 任何语言的任何解决方案将不胜感激! 问候。

4 个答案:

答案 0 :(得分:2)

如果您的最终输出如下所示:

<input id='id' value='someValue'>
<a href='someLink' id='like'>like</a>
...
<input id='id' value='someValue'>
<a href='someLink' id='like'>like</a>

会导致您遇到问题,因为ID必须是唯一的。

你可以重做它来使用类:

<input class="likeId" value='someValue'>
<a href='someLink' class='like'>like</a>
...
<input class="likeId" value='someValue'>
<a href='someLink' class='like'>like</a>

而不是点击处理程序。

$(".like").click(function(){
    $.post("done.php",
      {id:$(this).prev('.likeId').val()},
      function(data){
        ...
    });
});

根据输入值是否隐藏,您可以完全删除它并使用html data-*属性和.data(),假设您可以使用大于1.4.3的jQuery。

<a href='someLink' class='like' data-likeId='someValue'>like</a>
<a href='someLink' class='like' data-likeId='someValue'>like</a>

$(".like").click(function(){
    $.post("done.php",
      {id:$(this).data('likeId')},
      function(data){
        ...
    });
});

答案 1 :(得分:1)

ID必须在HTML文件中是唯一的。如果您有多个具有相同ID的元素,则浏览器仅返回第一个元素。因此,$('#like').click()仅将click事件处理程序附加到具有此ID的第一个元素。

你必须改用类:

<script type='text/javascript>
  $(".like").click(function(){
    $.post("done.php",
      {id:$(this).prev().val()},
      function(data){
        ...
      });
   });
</script>

<body>
<?php
    $result = myqsl_query("select * from ...");
?>
<?php while(($fetch = mysql_fetch_array($result))): ?>
    <input class="something" value="<?php echo $fetch[0]; ?>" />
    <a href="..." class="like">like</a>
<?php endwhile; ?>
</body>

补充说明:

  • 您不应该echo HTML,这会让您难以维护。相反,将PHP嵌入HTML中,就像我上面所示。
  • 我也使用alternative syntax for control structures,如果你混合使用HTML和PHP,它会更容易阅读。

答案 2 :(得分:0)

也许你可以这样做:

<script type='text/javascript>
   $(".like").click(function(){
      $.post("done.php",
         {id:$("#id").prev("input").val())},
         function(data){
         ...
      });
   });
</script>

<body>
    $result = myqsl_query("select * from ...");
    while($fetch = mysql_fetch_array($result){
    ..
    echo "<input name='id' value='$fetch[0]'>
    <a href='...' class='like'>like</a>";
    ..
</body>

答案 3 :(得分:0)

你说“首先喜欢”所以我假设你在页面中有很多“喜欢”的按钮。

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

但是标准会告诉你id是唯一的。也许是一个遍历迭代并将迭代附加到id的全局变量,例如'#like1', '#like2'等。

不确定这是否会引导您回答,但这是需要考虑的事情。