2010-11-13 51 views
1

我發現,滿足需求爲我的項目從這裏一些精彩代碼:如何更改此Javascript代碼中的表格元素?

http://www.askthecssguy.com/examples/rowlock/example9.html

我已經修改了代碼,這樣,當用戶選擇一個項目,然後點擊一個按鈕的數據進行處理(例如從服務器上的數據庫中刪除數據)

我一直無法弄清楚如何禁用再次發生的操作。我試過禁用單選按鈕。代碼以某種方式重新激活單選按鈕。我已將單選按鈕設置爲空。這也是行不通的。

我最後的想法是改變第二列中的文本(第一個是單選按鈕)作爲測試的手段,如果代碼已被刪除,但我根本無法弄清楚如何訪問該列和修改文字。

這是從上面的鏈接的原代碼:

function lockRow() { 
var tables = document.getElementsByTagName("table"); 
for (var m=0; m<tables.length; m++) { 
    if (tables[m].className == "pickme") { 
     var tbodies = tables[m].getElementsByTagName("tbody"); 
     for (var j=0; j<tbodies.length; j++) { 
      var rows = tbodies[j].getElementsByTagName("tr"); 
      for (var i=0; i<rows.length; i++) { 
       rows[i].oldClassName = rows[i].className; 
       rows[i].onclick = function() { 
        if (this.className.indexOf("selected") != -1) { 
         this.className = this.oldClassName; 
        } else { 
         removeSelectedStateFromOtherRows(); 
         addClass(this,"selected"); 
        } 
        selectRowRadio(this); 
       } 
      } 
     } 
    } 
} 

對此我砍死下來:

function testloop() 
{ 
var tables = document.getElementsByTagName("table"); 
    for (var m=0; m<tables.length; m++)  {  
    var tbodies = tables[m].getElementsByTagName("tbody"); 
    for (var j=0; j<tbodies.length; j++) { 
     var rows = tbodies[j].getElementsByTagName("td"); 
     for (var i=0; i<rows.length; i++) { 
      r = rows[ i ] ; 
       // r is the radio button. 
       //How do I access the text in the 2nd column? 
     }   
    } 
} 

}

如果以 '國內' 被選擇的行,我'想要將'國內'更改爲'已刪除'。我可以在其他代碼中檢測並處理該操作。

這是否有意義?有什麼更聰明或更簡單的方法來完成我想要完成的任務?我的JavaScript能力非常缺乏。謝謝。

<tr> 
<td> 
    <input 
     type="radio" 
     name="choice" 
     value="walalala" /> 
</td> 
<td>Domestic</td> 
<td>Titanic</td> 
<td>$600,788,188</td> 

回答

2

你有這取決於你真正想要做的幾種選擇。

  1. 您可以簡單地刪除相應的行 - 用戶不能選擇它,而其他代碼將無法找到它。
  2. 當用戶將它發送到服務器時,您可以將例如「已刪除」的類添加到行/輸入。下次用戶想要發送任何內容時,請檢查當前選定的行是否沒有「已刪除」類。
  3. 與2相同,但使用HTML5 data-xxx屬性。

像這樣的東西應該工作(使用jQuery):

$('button').click(function(event) { 
    var i = $('input:checked'); 
    if (i.hadClass('removed')) 
    event.preventDefault(); 
    else 
    i.addClass('removed'); 
}); 
+0

我不知道如何刪除該行。這當然是最終的解決方案。我會怎麼做呢? 該按鈕與我搶過的代碼完全無關,因此我不知道將按鈕綁回到循環的人。 我根本不瞭解jQuery。我只是回到Javascript。 即使我的文本列的最初解決方案不是最好的,我將如何去獲得它在我已經顯示的循環內獲得它?我很好奇。 對不起,因爲相當無知,但每個人都從一樓開始。謝謝。 – Jarek 2010-11-13 05:12:39

+0

JavaScript有一個parent.removeElement(element)函數,所以在你的循環中你可以得到var rows = tbodies [j]。的getElementsByTagName( 「TR」); tbodies [j]的.removeElement(行[X]);其中x是要刪除的行的索引。如果你不瞭解jQuery,你應該選擇它。使用$('input:checked')。parent()。parent()。remove()會讓你的生活更輕鬆。 Dojo或Prototype或許多其他JS庫中的其中一個也可以工作。 – 2010-11-13 10:19:19

+0

我使用Firefox的Firebug來瀏覽Javascript代碼。 當我加入你建議的代碼,螢火蟲扔此錯誤: 「tbodies [j]的.removeElement不是一個函數」 爲這行代碼: \t \t \t tbodies [j]的.removeElement(行[X ]); 我在做什麼錯? – Jarek 2010-11-13 13:42:06

相關問題