我有一个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>
我希望我成功地描述了这个问题! 任何语言的任何解决方案将不胜感激! 问候。
答案 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中,就像我上面所示。答案 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'
等。
不确定这是否会引导您回答,但这是需要考虑的事情。