2013-03-17 68 views
0

我有貼有一個while循環數據庫中的某些數據功能:的JavaScript中while循環

$dati = $link->query($sql); 
    print '<table>'; 

     while ($dato = $dati->fetch_object()) { 

      print '<tr>'; 
      print '<td id="cellaId">'; 
      $Id = $dato->Id; 
      print $Id; 
      print '</td>'; 

      print '<td>'; 
      print $dato->Data; 
      print '</td>'; 

      ...some other stuff... 

      print '<td>'; 
      print '<input type = "checkbox" name = "visto" id = "visto" onclick = "refreshData()">'; 
      print '</td>'; 

      print '<td>'; 
      print '<input type = "checkbox" name = "elaborato" id = "elaborato" onclick = "refreshData()">'; 
      print '</td>'; 

      print '</tr>'; 
     } 
     print '</table>'; 
     $dati->close(); 

現在,這兩個「複選框」調用一個函數:

function refreshData() { 

var vistovalue = document.getElementById("visto").checked ? '1' : '0' 
var elaboratovalue = document.getElementById("elaborato").checked ? '1' : '0' 
var idvalue = document.getElementById("cellaId").innerHTML 

alert(idvalue); 

[and then I do an ajax] 
} 

的問題是,我得到的idval始終是第一個從while循環出來的,而不是在單擊複選框的同一行上。

我怎樣才能得到正確的價值?

謝謝!

+1

你絕對**不能**有多個具有相同'id'的元素。每個元素(如果需要'id')都應該被賦予一個唯一的元素。 – 2013-03-17 00:45:36

回答

0

您只能在html頁面上擁有一個唯一的ID。

你可以做什麼,是添加一個計數器或$dato->Id的ID,以便它是唯一的,你可以識別它。然後,您可以使用該ID作爲參數調用您的函數。

例子:

print '<input type="checkbox" name="visto[' . $dato->Id . ']" 
     id="visto' . $dato->Id . '" onclick="refreshData(' . $dato->Id . ')">'; 

和:

function refreshData(Id) { 
    var elID = 'visto' + Id; 
    // etc. 

你必須與你name屬性同樣的問題,所以你可以在我的例子做這樣類似的有什麼(我使用一個數組這樣當表單發佈時你會得到一個數組)。

+0

完美!謝謝!!名稱並不重要,我不需要它,只有在選中複選框時更新數據庫的ID! – user2120569 2013-03-17 00:50:17

+0

@ user2120569不客氣! – jeroen 2013-03-17 00:51:54

+0

是的,我試圖做到這一點,但我必須等待!我會稍後再做;-) – user2120569 2013-03-17 00:53:00

0

突然出現在這裏快速查看... 最好保持您的ID唯一。使你的while循環計數器,並設置id="cellaId"+counter

那麼你可以傳遞onClick="refreshData("+count+")"

讓我知道,如果它的工作原理。