请在此处查看演示:http://jsfiddle.net/9pR87/28/
我正在创建一些额外的行(发票元素),但是当我想使用获取动态创建的输入中的值时,输入值始终为undefined
。为什么呢?
为什么jQuery无法找到动态创建输入的值?
答案 0 :(得分:6)
我认为这足以满足您的需求:
$('#GetValue').click(function() {
var i = $('table tbody tr').length-1; // subtract 1 for correct indexing
alert($('#ItemPrice-' + i).val());
// OR
alert( $('[id^=ItemPrice]:last').val() );
});
<强> Demo 强>
问题是:
tableRow += '<td><input type="text" name="ItemPrice[]" id="ItemPrice-' + i + ' "
^--- an space
placeholder="Item Price"></td>';
tableRow += '<td><input type="text" name="NumberOfItems[]" id="NumberOfItems-' + i + ' "
^-- an space
placeholder="Number Of Items"></td>';
答案 1 :(得分:2)
$('#GetValue').click(function() {
var i = $('table tbody tr').length; // this line is the issue
alert($('#ItemPrice-' + i).val());
});
我已经在你的代码中复制了这个函数,它给你提供了问题。我突出显示的一行应该是:
var i = $('table tbody tr').length-1;
这是因为Javascript中的数组是0索引的,这意味着它们从零开始向上计数。这意味着如果你想得到数组的最后一个元素,你需要找到数组的长度并减去一个,正如我所展示的那样。
这一行:
alert($('#ItemPrice-' + i).val());
实际上返回一个数组,从0开始计数。这就是为什么将元素放在array.length
位置会返回undefined。