2010-05-26 59 views
0

我有幾個表由另一個應用程序生成,我無法控制。我對jQuery和ajax完全陌生,對jsp只有有限的瞭解。兩個樣本行是:jQuery表 - 參考用戶輸入行名稱和值

<table class="sicknessForm">     
<tr id="row_0" class="datarow"> 
<td id="col_2"><input name="row_0-col_2" class="tabcell" value="Injuries"></td> 
<td id="col_4"><input name="row_0-col_4" class="tabcell" value="01"></td> 
<td id="col_5"><input name="row_0-col_5" class="tabcell" value="2"></td> 
<td id="col_6"><input name="row_0-col_6" class="tabcell" value="5"></td> 
</tr> 

<tr id="row_1" class="datarow"> 
<td id="col_2"><input name="row_1-col_2" class="tabcell" value="Absences"></td> 
<td id="col_4"><input name="row_1-col_4" class="tabcell" value="100"></td> 
<td id="col_5"><input name="row_1-col_5" class="tabcell" value="102"></td> 
<td id="col_6"><input name="row_1-col_6" class="tabcell" value="105"></td> 
</tr> 
</table> 

實際表中有更多的行和列。我需要做的是通過有序行的信息到數據庫中,如:
受傷,1,2,5 ....
缺席100,102,105 ...

我可以檢索使用每個輸入值:

$('#SicknessForm .userInput').each(function() { 
    alert($(this).val()); 
}); 
  1. 我怎樣才能通過每一行循環,從第一列中獲得的價值(受傷)和數據放置到數組發送到服務器?
  2. 如何引用每列的第一行以禁用用戶輸入?

    $(:HowDoIReferenceThis).attr('disabled', ''); 
    
  3. 我需要驗證每個小區是數字,除了第一列。任何關於這個的指針(否則我可以在我的servlet中檢查它),尤其是如何遍歷所有有效的輸入單元(除'受傷','Abences',...單元之外的所有單元)。

+2

你必須在標記都沒有控制權?我問,因爲該應用程序使用重複的ID生成無效的HTML。 – 2010-05-26 21:42:47

+0

這加上不必要地使用輸入字段作爲列標題。 – karim79 2010-05-26 21:45:29

+0

生成表格單元格的應用程序只是迭代行和列數據以生成表格。它不能被設置,以便一些單元格被輸入而另一些單元格不被輸入。 – Vic 2010-05-26 22:52:18

回答

0

修訂

DEMO:http://jsbin.com/imeno3/3

一切準備就緒!

$(function() { 
    var row = []; 
    $('.datarow').each(function(i) { 
     row.push($('td input:eq(0)', this).val() + ' -> '); 
     $('td input:gt(0)', this).each(function(e) { 
      if (isNaN(this.value)) { 
       $(this).attr('disabled', true); 
      } else { 
       row.push(this.value); 
      } 
     }); 
    }); 
    var send_to_ajax = row.join(' '); 
}); 

更新2

迴應置評

$('.tabcell').change(function() { 
    if (isNaN(this.value)) { 
    $(this).css('background','red'); 
    } else { 
    $(this).css('background','green'); 
    } 
    }); 
+0

所以這個函數循環遍歷每個'datarow'類,將第0列文本放入行數組,然後對於大於0的每個單元格,並檢查它是否不是數字。如果它不是數字,則禁用該元素,否則將其添加到行數組的末尾。
當輸入非數字字符時,是否有方法可以更改元素的顏色或將其刪除? $(this).empty(); 或 $(this).css({background:'red'}); 但是,當我嘗試這些時,我輸入一個非數字值時沒有任何反應。我可以將更改事件添加到每個表格元素或行嗎? 謝謝 Vic – Vic 2010-05-26 23:38:40

+0

看到更新! ;-) – 2010-05-27 01:36:54

+0

再次感謝aSeptik!我只是在看自己的.change事件函數。我將把它附加到行類,但你的方法工作。我認爲,如果事件附加到輸入元素而不是行元素,可能會更好。維克 – Vic 2010-05-27 03:46:58

0
//question 1 
$('.sicknessForm tr td:first-child input').attr('disabled', 'disabled'); 

//question 2 
var results = {} 
$('.sicknessForm tr').each(function(){ 
    var data = new Array(); 
    $(this).find('input:enabled').each(function(){ 
     data.push($(this).val()); 
    }); 
    results[$(this).find('input:disabled').val()]=data; 
}); 

此時結果對象將包含指向每個數據點的屬性。

問題3:

你可以在這裏進行驗證,或者你可以在內部各推到這些陣列之前做。至於驗證號碼的簡單方法可能是:

if (/^\d+$/.test($(this).val())){ 
    //data is good 
} 

這裏有一個的jsfiddle我亂做你的東西周圍:http://jsfiddle.net/YVkTy/

+0

令人敬畏的萊利。感謝您及時的回覆。我以前沒有聽說過jsfiddle,那真的很酷!如果可以的話,請至少保留一段時間。 – Vic 2010-05-26 23:04:23

+0

我不知道它是如何工作的東西 - 希望它不會被無限期刪除! – Ryley 2010-05-26 23:10:59