次のフィールドを含む注文ページがあります。
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
)