1

次のフィールドを含む注文ページがあります。

quantity, id, name, language, publisher

私のphpページには、次のコードで最初に10個のフィールドが作成されています。

<form action="new_order.php" method="POST">

        <fieldset>
          <div id="inputRows"> 
            <div class="controls controls-row">
              <label class="span1">Qty</label>
              <label class="span1">ID</label>
              <label class="span5">Literature</label>
              <label class="span2">Language</label>
              <label class="span2">Publisher</label>
            </div>

            <?php 
            $i = 0;
            //make 10 initial order forms
            for($i; $i <10; $i++) {
              echo "<div class=\"controls controls-row\">\r\n";
              echo "<input class=\"span1\" type=\"text\" id=\"quantity\" name=\"order[{$i}][quantity]\">\r\n";
              echo "<input class=\"span1\" type=\"text\" id=\"id\" name=\"order[{$i}][id]\">\r\n";
              echo "<input class=\"span5\" type=\"text\" id=\"name\" name=\"order[{$i}][name]\">\r\n";

              echo "<select class=\"span2\" type=\"text\" id=\"language\" name=\"order[{$i}][language]\">\r\n";
              foreach($lang as $k=>$v) {
                echo "<option value=\"{$k}\">" . $v . "</option>\r\n";
              }
              echo "</select>\r\n";

              echo "<input class=\"span2\" type=\"text\" id=\"publisher\" name=\"order[{$i}][publisher]\">\r\n";
              echo "</div>\r\n";
              echo "\r\n";
            }
            ?>
          </div>
            <input type="button" id="addline" value="Add Another Line" >
            <br /><br /><br />
            <hr />
            <button type="submit" name="submit" class="btn btn-primary" value="order">Add Order</button>
            <button type="submit" name="submit" class="btn" value="cancel">Cancel</button>
          </fieldset>
      </form>

すべて順調です。フォームは正常に読み込まれます。すべてのオプションは問題ありません。ソースコードを確認しました。

これで、上部に jQuery が少しあり、別のフィールドを追加できます。これらと同じフィールドで行全体を挿入するようにセットアップしましたが、簡単にするために、テキスト フィールドを 1 つだけ作成しましょう。

$(function() {

  $('#addline').on('click', function() {
    nInput = '<input type="text" name"text1" >';
    $('#inputRows').append(nInput);
  });
});

それは行をうまく追加します。問題ない。ページをそれ自体に送信すると、元の 10 個の配列は問題なく取得されますが、新しいフィールドは通過しません。

私は Stack や他のサイトを調査していましたが、どこかで読んだところによると、これはフォームが既に読み込まれているために発生するため、別の入力フィールドを追加すると、フォーム データの一部として含まれません。これは何が起こっているのですか?もしそうなら、それを行う別の方法はありますか?

これは、.on() 関数と .click() 関数を使用しているという事実と関係がありますか? または、$('document').ready() で実行されているためですか? すべてが実際にロードされた後ですか?

編集: これは、送信先の php スクリプトです。

<?php
  require_once("../../includes/initialize.php");

  if(!isset($_SESSION['user_id'])) {
    redirect("login.php");
  }

  if(isset($_POST['submit']) && $_POST['submit' == 'order']) {
    include("html/neworder.html.php");
  }

そして、含まれている neworder.html.php ファイルから呼び出される print_r($_POST) は次のとおりです。

Array
(
    [order] => Array
        (
            [0] => Array
                (
                    [quantity] => 
                    [id] => 
                    [name] => 
                    [language] => en
                    [publisher] => 
                )

            [1] => Array
                (
                    [quantity] => 
                    [id] => 
                    [name] => 
                    [language] => en
                    [publisher] => 
                )

   //etc... 

            [9] => Array
                (
                    [quantity] => 
                    [id] => 
                    [name] => 
                    [language] => en
                    [publisher] => 
                )

        )

    [submit] => order
)
4

2 に答える 2

0

解決済み:

$(function() {

  $('#addline').on('click', function() {
    nInput = '<input type="text" name"text1" >';
    $('#inputRows').append(nInput);
  });
});

入力フィールドの名前変数に「=」がありません。これが、POST が検出されなかった理由です。

顔やし

于 2013-06-19T20:40:53.613 に答える