2011-08-03 18 views
0

「通常の」フォーム要素を持つフォームがあり、javascriptボタンをクリックして作成された要素もフォームになります。JS作成のフォーム要素が送信されない

<script src="incld/addClass.js" language="Javascript" type="text/javascript"> 
</script> 
<input type="button" value="Add a Class" onClick="addInput('dynamicInput');" class="add-class-btn"> 

$ _POSTの出力を見ると、これらの要素は送信されていません。

はここにJSだ:

var counter = 1; 
var limit = 25; 
function addInput(divName){ 
    if (counter == limit) { 
    alert("You have reached the limit of adding " + counter + " inputs"); 
    } else { 
    var newdiv = document.createElement('div'); 
    newdiv.innerHTML = "Class " + (counter + 1) + "   <p><label for=\"class_name\">Class Name </label><input type=\"text\" name=\"class[" + (counter + 1) + "][name]\" id=\"class[" + (counter + 1) + "][name]\" class=\"text-fld\" /></p><p><label for=\"class_grade_level\">Grade Level </label><input type=\"text\" name=\"class[" + (counter + 1) + "][grade_level]\" id=\"class[" + (counter + 1) + "][grade_level]\" class=\"text-fld\" /></p><p><label for=\"class_subject\">Subject </label><input type=\"text\" name=\"class[" + (counter + 1) + "][subject]\" id=\"class[" + (counter + 1) + "][subject]\" class=\"text-fld\" /></p>"; 
    document.getElementById(divName).appendChild(newdiv); 
    counter++; 
    } 
} 

編集: "通常の" フォーム要素は、JS-作成したものとは異なるdivタグです。多分この問題?

EDIT2:ここに利用できる全(編集した醜い)ソース:http://pastebin.com/y5QJU4NN

+0

これはすべてのブラウザで発生しますか? –

+0

HTTPリクエストがブラウザからどのようになっているかを確認して、問題がPHP側にないことを確認してください。 Chromeのデバッガのネットワークツールが役立ちます。Firefoxの場合は、Tamper Dataプラグインがあります。 – Pointy

+0

'

'要素の中にidが' dynamicInput 'の要素がありますか? –

答えて

0

私はあなたのコードをコピーして、それを変更せずに送信されたフォームを作成することができました。だから、それはあなたが作品上に掲載のコードのように見える

<?php 
    var_dump($_POST); 
?> 

array(1) { 
    ["class"]=> array(1) { 
     [2]=> array(3) { 
      ["name"]=> string(5) "test1" 
      ["grade_level"]=> string(5) "test2" 
      ["subject"]=> string(5) "test3" 
     } 
    } 
} 

:フォームが送信された後しかし、受信側では、私はこれに似POST構造で巻き取ります。ハンドラースクリプトのPOSTで正しい配列レベルを検査していることを確認してください。


編集

PHPは、フィールド名として配列インデックスの使用を好きていなかったように見えます。 class[]などのフィールド名を指定できると確信しており、フィールド名がclass[]のすべての受信フィールドを配列として取り込みますが、class[1][name]のようなフィールド名を指定できるかどうかはわかりません。私はの線に沿って何かであるためにあなたのJSでフィールド名を変更:

<input type=\"text\" name=\"class-" + (counter + 1) + "-name\" 
    id=\"class[" + (counter + 1) + "][name]\" class=\"text-fld\" /> 

そして、それがうまくPOSTに挿入した後に提出します。それを試して、それが動作するかどうか確認してください。

+0

var_dumpを実行すると、他の入力要素からデータを取得しますが、JSで作成したデータは取得しません。別のdivタグの問題である可能性がありますか? – amindfv

+0

いいえ。何かがフォームから投稿された場​​合は、POST配列に値を設定する必要があります。 POST配列に含まれていない場合は、フォームの子としてDOMにフィールドを正しく取得できません。 –

関連する問題