こちらのデモをご覧ください: http://jsfiddle.net/9pR87/28/
- 入力の追加 - 新しい入力で新しい行を追加します
- 値を取得 - 最後に追加された入力の値を取得しています
余分な行(請求書要素)をいくつか作成していますが、動的に作成された入力で値を取得したい場合、入力値は常にundefined
. なんで?
jQueryが動的に作成された入力の値を見つけられないのはなぜですか?
こちらのデモをご覧ください: http://jsfiddle.net/9pR87/28/
余分な行(請求書要素)をいくつか作成していますが、動的に作成された入力で値を取得したい場合、入力値は常にundefined
. なんで?
jQueryが動的に作成された入力の値を見つけられないのはなぜですか?
あなたが望むものにはこれで十分だと思います:
$('#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() );
});
問題は:
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>';
$('#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 であるためです。つまり、ゼロからカウントアップを開始します。これは、配列の最後の要素を取得したい場合は、配列の長さを見つけて、私が示したように 1 を引く必要があることを意味します。
この行:
alert($('#ItemPrice-' + i).val());
実際には、0 からカウントを開始する配列を返します。そのため、位置の要素を取得するとarray.length
undefined が返されます。
これが証拠としての動作デモです。