Поэтому я добавляю строку в таблицу html. У меня есть флажок в строке, поэтому мне нужно увеличить ключ массива входов, которые я добавляю, чтобы проверить, установлен ли флажок. Это html
<tr>
<td><img src="/pics/deleteRow.png" class="delete"> </td>
<td class="productColumn">
<select name="productInputName[<?php echo $rowNum; ?>]" class="productSelect" >
<option></option>
<?php
foreach($productList as $product){
//Get options
}
?>
</select>
</td>
<td><input class="quantityField" name="quantity[<?php echo $rowNum; ?>]"type="number" <?php echo ' value="',$detail->getQuantity(),'"'; ?>></td>
<td><input class="quantityReturnedField" name="quantityReturned[<?php echo $rowNum; ?>]" type="number" <?php echo ' value="',$detail->getQuantityReturned(),'"'; ?>></td>
<td> <input class="priceField" name="price[<?php echo $rowNum; ?>]" type="number" step="any"
<?php echo ' value="', $detail->getPrice(), '"'; ?>></td>
<td ><input class="subtotalField" type="number" step="any" readonly="readonly"></td>
<td ><input class="specialOrder" type="checkbox" name="specialOrder[<?php echo $rowNum; ?>]" <?php if($detail->getSpecialOrder()){ echo 'checked="checked"';} ?>>Special Order</td>
</tr>
Это jQuery
var rowNum = 300;
$('.productSelect').change(function() {
insertBlankRow(1);
});
function insertBlankRow(numRows){
for(i=0;i < numRows; i++){
$('#orderTable tbody>tr:last').clone(true).insertAfter('#orderTable tbody>tr:last').end()
.find("input[type=checkbox]").attr('name', "specialOrder[" +rowNum + "]").end()
.find(".productSelect").val("").attr('name', "productInputName[" +rowNum + "]").end()
.find(".quantityField").val("").attr('name', "quantity["+rowNum+"]");
rowNum++;
}
return false;
}
Я перешел к этому и над этим, и, на мой взгляд, он должен работать, но на самом деле он просто копирует номер индекса из последней строки для всех, кроме флажка "Специальный заказ", где я получаю NaN для индекса. Я изменил имя в jQuery, чтобы не повлиять, поэтому он правильно вставляет строку, но не вносит никаких изменений в атрибут name. Любые идеи, что мне не хватает?
Это работает для меня, когда я использую это с таблицей, которую вы используете. Он добавляет строку с индексом 301, а затем другой с 302, а другой с 303. (Я немного ее заполнил, потому что не видел, чтобы все поля с одним и тем же индексом беспокоили меня.
var rowNum = 300;
$('.productSelect').change(function() {
insertBlankRow(1);
});
function insertBlankRow(numRows){
for(i=0;i < numRows; i++){
$('#orderTable tbody>tr:last').clone(true).insertAfter('#orderTable tbody>tr:last').end()
.find(".quantityField").val("").attr('name', "quantity["+rowNum+"]").end()
.find(".quantityReturnedField").val("").attr('name', "quantityReturned["+rowNum+"]").end()
.find(".priceField").val("").attr('name', "price["+rowNum+"]").end()
.find(".productSelect").val("").attr('name', "productInputName["+rowNum+"]").end()
.find("input[type=checkbox]").attr('name', "specialOrder[" +rowNum + "]");
rowNum++;
}
return false;
}
См. Загруженный тест здесь: http://www.davideugenepratt.com/stack-overflow-samples/add-row-to-table.html