2012-08-22 82 views
0

我正在動態構建一個頁面。此頁面需要從輸入標籤讀取信息,但它是動態的。我應該設置的東西是一個陣列,因爲我看你可以提交一個帶有文本輸入數組的表單嗎?

我想保留數據集。

<script> 
    function adjustPilots(){ 
var pilots = $("#numPilots").val(); 
var info = '<td><table>'+ 
    '<tr><td>Minumum Collateral</td><td colspan="2"><input type = "text" size = "10" maxLength = "6" /> to <input type = "text" size = "10" maxLength = "6" /></td></tr>'+ 
    '<tr><td>Reward</td><td colspan="2"><input type = "text" size = "10" maxLength = "6" /> to <input type = "text" size = "10" maxLength = "6" /></td></tr>'+ 
    '<tr><td>Volume</td><td colspan="2"><input type = "text" size = "10" maxLength = "7" /> to <input type = "text" size = "10" maxLength = "7" /></td></tr>'+ 
    '<tr><td>Start: </td><td><input type = "text" name = "s" id = "s" class = "s" value autocomplete = "off"></td></tr>'+ 
    '<tr><td>End: </td><td><input type = "text" name = "e" id = "e" class = "e" value autocomplete = "off"></td></tr>'+ 
    '</table></td>'; 


for(var i = 0; i < Number(pilots); i++){ 
    $("#pilotrow").append(info); 
} 
} 
</script> 
<body> 
<form> 
<table> 
<tr><td>Number of Pilots</td><td colspan="2"><input id = "numPilots" type = "text" size="3" maxLength="3" onchange = 'adjustPilots()' /></td></tr> 
<tr id = "pilotrow"></tr> 

<tr><td><input type = "submit" name = "submit"></td></tr> 
</table> 
</form> 
</body> 

我在想的一個選擇就是不使用表單,並用javascript構建它。然後創建一個JSON對象並使用AJAX將其發送到服務器。這是否是一個堅實的方式,或者有更好的主意?

+0

幾個你的投入沒有'name'屬性,你將如何序列化這些數據? – Paul

+0

我不確定你在問什麼,但如果我沒有誤解,你可以將'display:none'設置爲該表,然後將其包含在你的html代碼中,然後刪除並將其分配給一個變量,並使用' clone()'jQuery方法追加它的克隆版本。 – inhan

回答

3

至少有兩種方法可以做到這一點。

沒有JavaScript,您指示泄一個形式元素的數組這樣

<input type="text" name="input[]"/> 
<input type="text" name="input[]"/> 
<input type="text" name="input[]"/> 
<input type="text" name="input[]"/> 

在PHP

$inputs = $_POST['input']; 
for($inputs as $inp){ 

} 

使用Ajax和jQuery,你可以只是簡單的序列化表單,並張貼到後端

+0

假設這是正確的,這確實是我正在尋找的答案。 – Fallenreaper

0

嘗試利用隱藏的輸入標籤以任何您喜歡的方式發送數據。例如:

<input type="hidden" name="myinput" id="myinput" /> 

現在JS:

$("form").submit(function() { 
    $("input").not("#myinput").each(function() { 
     $("#myinput").val($("#myinput").val()+$(this).val()); 
     // you can format anyway you want this is just an example 
    }); 
}); 

希望這有助於!

2

您可以通過在輸入中使用name屬性來實現此目的。像這樣:

<input type="text" name="pilots[]" /> 

然後,你可能想要跟蹤你有多少飛行員,你可以發送一個索引數組。像這樣:

<input type="text" name="pilots[0][minumumCollatural]" /> 
<input type="text" name="pilots[0][reward]" /> 
<input type="text" name="pilots[0][volume]" /> 

當您提交表單服務器這樣的話,你的飛行員的陣列看起來像:

$pilots = $_POST['pilots']; 

// Which looks like 
array(
    [0] => array 
      (
      [minumumCollatural] => // Some number 
      [reward] => // Some number 
     ) 
    [1] => array 
      (
      [minumumCollatural] => // Some number 
      [reward] => // Some number 
     ) 
) 
相關問題