2011-03-16 41 views
1

我有一个while循环显示数据库中的数据项,我想处理每个项目,但我得到的只是第一个div,对于每个迭代,我想采取当前迭代的'id'并处理它,它在Facebook中看起来像'like',当我点击第一个'like'时,jquery运行$.post(..)函数,并且一切正常:使用此ID完成处理, 但是当我点击其他未来“喜欢的职位仍然梅索德发送第一个ID(由萤火虫签出), 代码:在一个while循环内处理一个div

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

我希望我成功说明问题! 任何语言的解决方案将不胜感激! 此致敬礼。

+0

也许这只是我 - 但如果你在每一个锚点都设置了id =“like”,你就不能成功! – 2011-03-16 19:16:08

回答

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,则更容易阅读。
+0

是的,我忘了,我尝试了类,我修改了jquery函数:$(“。like).click(...),但没有解决问题,总是我得到相同的数据发布完成。 PHP,我不知道是否有一种方法来初始化数据发送???? – Nadj 2011-03-16 19:24:18

+0

感谢Felix为您的建议,经验出现在这里! – Nadj 2011-03-16 20:16:56

2

如果你的最终输出看起来是这样的:作为一个ID必须为每DOM独特

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

将导致你的问题。

你可以返工它使用类:

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

工作非常非常好,因为通缉,谢谢MArk,你看起来像有点专家^^! – Nadj 2011-03-16 20:15:06

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

我会尝试它,并回复我得到的东西!谢谢你们! – Nadj 2011-03-16 19:44:56

0

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

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

但标准会告诉你,id的是唯一的。也许是一个全局变量,迭代和追加迭代的ID如'#like1', '#like2'

不知道这是否会导致你的答案,但它是需要考虑的事情。