2

こちらのデモをご覧ください: http://jsfiddle.net/9pR87/28/

  1. 入力の追加 - 新しい入力で新しい行を追加します
  2. 値を取得 - 最後に追加された入力の値を取得しています

余分な行(請求書要素)をいくつか作成していますが、動的に作成された入力で値を取得したい場合、入力値は常にundefined. なんで?

jQueryが動的に作成された入力の値を見つけられないのはなぜですか?

4

2 に答える 2

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() );
});

デモ

jsfiddle のコメントによると

問題は:

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>';

ここに更新と作業コードがあります

于 2012-09-11T16:55:43.050 に答える
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 であるためです。つまり、ゼロからカウントアップを開始します。これは、配列の最後の要素を取得したい場合は、配列の長さを見つけて、私が示したように 1 を引く必要があることを意味します。

この行:

alert($('#ItemPrice-' + i).val());

実際には、0 からカウントを開始する配列を返します。そのため、位置の要素を取得するとarray.lengthundefined が返されます。

これが証拠としての動作デモです。

于 2012-09-11T16:54:52.473 に答える