2013-10-24 43 views
0

我有我的HTML此表:爲什麼我不能得到的輸入值

<table class="dataTable" id="repaymentShedule"> 
       <thead> 
        <tr> 
         <th>1</th> 
         <th>2</th> 
         <th>3</th> 
         <th>4</th> 
         <th>5</th> 
         <th>6</th> 
         <th>7</th> 
         <th>8</th> 
        </tr> 
       </thead> 
       <tbody data-bind="foreach: creditDetails"> 
        <tr> 
         <td class="paymentDate" data-bind="text: dateOfPayment"></td> 
         <td class="startBalance" data-bind="text: beginingBalance"></td>       
         <td class="monthlyInt" data-bind="text: monthlyInterest"></td> 
         <td class="principal"><input data-bind="value: princpalPayment"></input></td> 
         <td class="monthlyInst" data-bind="text: monthlyInstallment"></td> 
         <td class="remainingBalance" data-bind="text: endingBalance"></td> 
         <td class="paid"><input type="checkbox" data-bind="checked: isPaid, disable: isPaid, click: testFunc, value: true"></td> <!-- value: true moje da ne e nujno --> 
         <td class="currentDate" data-bind="text: currentDate"></td> 
        </tr> 
       </tbody> 
      </table> 

值從knockout js正在添加綁定。 ,我試圖讓principal類的所有值與下面的功能:

updateValues = function(){ 
    $("tbody").find("tr").each(function() {        
     var principal = $(this).find('td.principal').val(); 
     console.log(principal); 
    });       
}; 

卜控制檯將返回:(an empty string)

編輯: 上述功能工作沒有任何問題paymentDate類只能通過更改.val().text()

我很確定,我沒有得到正確的方式,或綁定不是一個llowing我得到的電流值,但我真的不能夠發現問題

回答

6

你需要這樣做:

var principal = $(this).find('td.principal :input').val(); 

得到帶班的表格單元格內input元素的值principal

另外,作爲每.val() API Documentation: -

的.VAL()方法主要用於獲得表單元素 如輸入,選擇和textarea的值。在元素的情況下,.val()方法返回一個包含每個選定選項的數組 ;如果未選擇任何選項,則返回空值 。

因此,您在使用代碼時在控制檯中獲取空字符串。

上述功能,無需在PAYMENTDATE類 任何問題,只有通過改變.VAL工程()與.text區段()

這也解釋了爲什麼你改變.val()後得到正確的值paymentDate表格單元爲.text(),因爲它內部沒有任何input元素。

3
<td class="principal"><input data-bind="value: princpalPayment"></input></td> 

你不需要關閉</input>標籤,如input元素是自閉。

而你只需要更好地瞄準。

var principal = $(this).find('td.principal input').val(); 
1

你不找你想找的TD值清楚犯規輸入值存在 這裏是與固定的jQuery

http://jsfiddle.net/krxva/

updateValues = function(){ 
$("tbody").find("tr").each(function() {        
    var principal = $(this).find('td.principal').find('input').val(); 
    console.log(principal); 
});       
}; 
1
var principal = $(this).find('td.principal').val(); 
      console.log(principal); 

以上willn一個的jsfiddle不工作,因爲td也有一個輸入元素。

既然你想要的td內輸入元素的值,所以用這樣的:

var principal = $(this).find('td.principal input').val(); 
// Or use this 
var principal = $(this).find('td.principal > input').val(); 
console.log(principal); 

參考this理解

2

如果您使用KnockoutJS你可能不需要使用jQuery在所有。從您的ViewModel獲得正確的值,如下所示:

updateValues = function() { 

    var details = MyMainViewModel.creditDetails(); 

    for (var i = 0; i < details.length; i++) { 
     var principal = details[i].princpalPayment(); 
     console.log(principal); 
    } 

}; 

不依賴於您的視圖,因此可以測試單元。另外,如果你把這個函數放在正確的範圍內(例如綁定到數據表的可觀察值),當你想使用結果時,你將可以訪問所有相關的其他可觀察對象。

相關問題