10


0

jQueryは.append()の後にフォームのすべての入力をポストしない

jQueryの.append()メソッドで動的に生成されたフォームがあります。 新しい入力、テキストボックス、cmbboxなどをいくつでも追加できます。

しかし問題は、フォームのsumbitを実行すると、PHPターゲットは追加された新しい入力を受け取らず、append()の前のフォームに既に入力されている変数のみを受け取ることです。

何か案は?

 +
JavaScript:
$("#button").live('click',function add(){
   $("#list").append(
       ''
    +''+
       ''
   );
});
 +
Html:

 +
PHP:

5 Answer


4


問題1:

#button`は、フォームを送信するのではなく、フォームに追加するためだけに使用するため、タイプが submit`であってはなりません。 だからあなたが持っている必要があります:


+

問題2:

変数を上書きしています。 「名前」はフォームとともに送信される変数であるため、「入力」の追加ごとに新しい名前を付けるか、変数を配列にする必要があります。

さらに、同じ `id`を持つ要素を複数持つことはできません。

これを解決する最も簡単な方法は、「prova []」という形式を使用して「prova」を配列にすることです。

$("#button").live('click',function() {
   $("#list").append(
       '' +
         // Removed repetitive ID and made prova an array
       ''
   );
});

* http://jsfiddle.net/XAZD7/ [jsFiddleの例] *


1


「click」イベントをインターセプトして要素をフォームに追加していますが、イベントは既に開始されており、フォームのコンテンツを再確認せずにデフォルトのアクションを完了します(フォームを送信します)。

フィールドを追加した後にイベントを停止し(preventDefaultが正しい選択である必要があります)、フォームを再送信する必要があります。

これらの線に沿って何か:

$('#button').live('click', function add(event){
    event.preventDefault();
    $('#list').append(...);
    $('#form').submit();
});

私はそれをテストしていませんが、私はそれが動作するはずだとかなり確信しています:)


1


明確にするため、および他の問題を別として、ここで@Claudioのメモが正しい答えです。 私はちょうど同じ問題がありました、ボタンタイプは「ボタン」であり、新しい要素の名前は動的にインクリメントされていました。 すべて正常に見えましたが、追加された要素は_送信しません_。

次に、フォームタグがテーブルタグ内にあることに気付きました。 私はそれらを外に移動し、それはすべて計画どおりに機能しました。


0


表示するコードはありますか? phpが送信された変数を「見る」ためには、フォーム要素で指定された「名前」属性を持っていることを確認する必要があります。 あなたの問題はphpではなくjQueryにあると感じています。


0


最良の推測:動的に追加された要素の名前属性を設定していない。