为什么我无法获得输入值

时间:2013-10-24 06:44:41

标签: javascript jquery knockout.js

我在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);
    });                           
};

Bu控制台返回:(an empty string)

修改 只有将paymentDate更改为.val()

,上述功能才能在.text()课程中正常运行

我很确定我没有以正确的方式获得价值,或者绑定不允许我获得当前值,但我真的无法发现问题

5 个答案:

答案 0 :(得分:6)

你需要这样做:

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

使用类input获取表格单元格中principal元素的值。

另外,根据.val() API Documentation: -

  

.val()方法主要用于获取表单元素的值   例如input,select和textarea。对于元素,.val()方法返回一个数组   包含每个选定的选项;如果未选择任何选项,则返回   空。

因此,在使用代码时,您将在控制台中获得空字符串。

  

上述功能在paymentDate类上没有任何问题   只能将.val()更改为.text()

这也解释了为什么在将.val()表格单元格的.text()更改为paymentDate后得到了正确的值,因为它内部没有任何input元素

答案 1 :(得分:3)

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

您不需要结束</input>代码,因为input元素是自动关闭的。

你只需要更好地瞄准。

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

答案 2 :(得分: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);
    }

};

不依赖于您的视图,因此单元可测试。此外,如果将此函数放在范围的正确位(例如,绑定到数据表的observable),则在要使用结果时,您将可以访问所有相关的其他可观察对象。

答案 3 :(得分:1)

你没有找到你看td值的输入值,这显然不存在 这是一个带有固定jquery的jsfiddle

http://jsfiddle.net/krxva/

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

答案 4 :(得分:1)

var principal = $(this).find('td.principal').val();
           console.log(principal);

上面不起作用,因为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了解