Вставка новой строки в таблицу с помощью jQuery и увеличение количества массивов

0

Поэтому я добавляю строку в таблицу 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. Любые идеи, что мне не хватает?

Теги:

1 ответ

1
Лучший ответ

Это работает для меня, когда я использую это с таблицей, которую вы используете. Он добавляет строку с индексом 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

  • 0
    Извините, я должен был иметь это там. Я отредактировал его, чтобы отразить объявление rowNum
  • 0
    Итак, я тупой. Я звонил не тот файл JS. +1 за показ кода работал и заставлял меня искать проблему в другом месте. Извините, что потратил впустую ваше время :(

Ещё вопросы

Сообщество Overcoder
Наверх
Меню