2011-03-16 40 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'

不知道這是否會導致你的答案,但它是需要考慮的事情。