我有一個使用javascript動態添加新行的表單。表單輸入名稱是一個數組「items」。該表單使用POST方法將變量發送到php腳本,但在php腳本中,僅接收到來自表單的第一行輸入。這發生在Firefox/Chrome中,但在IE6中,變量按我的預期發送。
以下是代碼:
<html>
<head>
</head>
<body>
<SCRIPT language="javascript">
function addRow(tableID) {
var table = document.getElementById(tableID);
var rowCount = table.rows.length;
var row = table.insertRow(rowCount);
var colCount = table.rows[1].cells.length;
for(var i=0; i<colCount; i++) {
var newcell = row.insertCell(i);
newcell.innerHTML = table.rows[1].cells[i].innerHTML;
//alert(newcell.childNodes);
switch(newcell.childNodes[0].type) {
case "text":
newcell.childNodes[0].value = "laro";
//newcell.childNodes[0].name = "Hello";
break;
case "checkbox":
newcell.childNodes[0].checked = false;
break;
case "select":
newcell.childNodes[0].selectedIndex = 2;
break;
}
}
var newRowCount = table.rows.length;
for(var i=1; i<=newRowCount; i++){
table.rows[i].cells[1].getElementsByTagName('input').item(0).setAttribute('name','items['+i+'][product_id]');
table.rows[i].cells[2].getElementsByTagName('input').item(0).setAttribute('name','items['+i+'][serial]');
table.rows[i].cells[3].getElementsByTagName('input').item(0).setAttribute('name','items['+i+'][product_remarks]');
}
}
</SCRIPT>
<form action="script.php" method="action">
<table>
<th>Product ID</th><th>Serial No.</th><th>Remarks</th>
<tr><td><input type="text" name="items[][product_id]"></td>
<td><input type="items[][serial]"></td>
<td><input type="items[]['product_remarks']"></td>
</tr>
<input type="submit" name="submit" value="Add Product">
</table>
</form>
</body>
</html>
而下面是的script.php:
<?php
$items = $_POST['items'];
foreach($items as $item)
{
$new_item = array(
'product_id' => $item['product_id'],
'serial' => $item['serial'],
'product_remarks' => $item['product_remarks']
);
$this->db->addProduct($new_item); //This is a function that adds the records(array) to database.
?>
現在的問題是,在Firefox或Chrome,如果我在表單添加多行並提交表單,只有第一行數據被插入到數據庫中。但是,在IE中,所有行都被插入。
任何人都可以請幫助我嗎?我是新來的JavaScript。
非常感謝。
也許你的代碼解釋多一點? – cereallarceny 2012-10-29 00:48:21