繁体   English   中英

在while循环中处理div

[英]deal with a div within a while loop

我有一个while循环,它显示数据库中的数据项,我想分开处理,但我得到的只是第一个div,对于每次迭代,我想获取当前迭代的“ id”并进行处理,在Facebook上看起来像“赞”,当我单击第一个“ $.post(..) ”时,jQuery运行$.post(..)函数,一切正常:使用此ID完成处理,但是当我单击其他下一个“赞”时post methode仍然发送第一个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>

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

如果您的最终输出看起来像这样:

<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){
        ...
    });
});

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中,如我上面所示。
  • 我还将控件结构使用替代语法,如果将HTML和PHP混合使用,则更易于阅读。

也许您可以执行以下操作:

<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>

您说“第一次喜欢”,所以我假设您在页面中有很多“喜欢”按钮。

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

但是标准会告诉您ID是唯一的。 也许是一个全局变量,它将迭代'#like1', '#like2' ID后面,例如'#like1', '#like2'等。

不知道这是否会导致您找到答案,但这是需要考虑的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM