Mam stół z każdym rzędem, jest wielowymiarową tablicą, z nazwą wiersza, taką jak nazwa = "produkt [Klucz] [Zamówienie]" Klucz ma wartość domyślną jest w porządku rosnącym (0,1,2,3 ...) Za każdym razem, gdy klikam przycisk Usuń każdy wiersz, chcę wszystkie kluczowe wartości w tabeli, są resetowane do wartości domyślnej, ale nie wiem, jak to zrobić?

To jak tabela ma wiersze, które mają nazwę: Nazwa = "Produkt [1] [Nazwa]", Nazwa = "Produkt [2] [Nazwa]", Nazwa = "Produkt [3] [Nazwa]".

Jeśli usunąłem wiersz Uzyskaj nazwę = "Produkt [2] [Nazwa]" Chcę, aby trzeci rząd zmienić klucz od 3 do 2 itp ...

Zaktualizuj pytanie:

Mam problem, gdy próbuję ustawić klucz do ukrytego wejścia. Nie wiem jak ustawić wartość kluczową dla ukrytego wejścia

<input type=hidden name="products['+i+'][id]">

Czy ktoś mi pomoże plz?

Jak tabela https://jsfiddle.net/soulcrys/eydx7dn0

<table id="list">
  <tr>
<input type="hidden" maxlength="2" id="id" name="product[1][id]" value="" />
    <td>
      <input type="text" maxlength="2" id="display_order" name="product[1][order]" value="1" />
    </td>
    <td>
      <input type="text" maxlength="20" id="name" name="product[1][name]" value="">
    </td>
    <td>      
    </td>
  </tr>
</table>
<input type="button" value="Add" id="add_more" />

   $('#add_more').click(function() {
  var currentLength = $('#list tr').length + 1;
  var htmldata = '<tr>';
  htmldata += '<td>' + '<input type="text" maxlength="2" id="order" name="product[' + currentLength + '][order]" value="' + currentLength + ' " />' + '</td>';
  htmldata += '<td>' + '<input type="text" maxlength="2" id="name" name="product[' + currentLength + '][name]" value="" />' + '</td>';
  htmldata += '<td>' + '<input type="button" class="deleteBtn" value="Delete">' + '</td>';
  htmldata += '</tr>';
  $("#list").append(htmldata);
})

$(document).on('click','.deleteBtn',function() {
  $(this).closest('tr').remove();
  var i=1;
  var j = 1;
  $('tr td input[type="text"]').each(function(index){
    var id = $(this).attr('id');
    console.log($(this).attr('name'));
    if(id == 'order')
    {
      $(this).attr('name','products['+i+'][order]')
      $(this).val(i);
    }else if(id == 'name')
    {
      $(this).attr('name','products['+i+'][name]')
    }

    if(j == 2)
    {
      j = 1;
      i++;
    }else{
        j++;
    }

  })
})
-1
Elune Crystal 26 czerwiec 2017, 07:47

3 odpowiedzi

Najlepsza odpowiedź

Wypróbuj ten kod, aby zresetować identyfikatory

Porozmawiający skrzypce: https://jsfiddle.net/eydx7dn0/7/

$('#add_more').click(function() {
  var currentLength = $('#list tr').length + 1;
  var htmldata = '<tr>';
  htmldata += '<td>' + '<input type="text" maxlength="2" id="order" name="product[' + currentLength + '][order]" value="' + currentLength + ' " />' + '</td>';
  htmldata += '<td>' + '<input type="text" maxlength="2" id="name" name="product[' + currentLength + '][name]" value="" />' + '</td>';
  htmldata += '<td>' + '<input type="button" class="deleteBtn" value="Delete">' + '</td>';
  htmldata += '</tr>';
  $("#list").append(htmldata);
})

$(document).on('click','.deleteBtn',function() {
  $(this).closest('tr').remove();
  var i=1;
  var j = 1;
  $('tr td input[type="text"]').each(function(index){
    var id = $(this).attr('id');
    console.log($(this).attr('name'));
    if(id == 'order' || id == 'display_order')
    {
      $(this).attr('name','products['+i+'][order]')
      $(this).val(i);
    }else if(id == 'name')
    {
      $(this).attr('name','products['+i+'][name]')
    }

    if(j == 2)
    {
      j = 1;
      i++;
    }else{
        j++;
    }

  })
})
0
Rahul 26 czerwiec 2017, 05:53

Musisz pracować na żywo. Zmień ten kod i może rozwiązać

$(document).on('click', '#deleteBtn', function() {


$(this).closest('tr').remove();

})
-1
sabbirspi 26 czerwiec 2017, 04:57

Odpowiedź @sabbirspi odnosi się do jednego potencjalnego problemu, ale na odpowiedź na pytanie (i bezwstydnie pożyczanie jego pierwszej linii kodu)

$(document).on('click', '#deleteBtn', function() {
    $(this).closest('tr').remove();

    $('#list tr').each(function(index, tr) {
        $(this).find('input[type=text]').each(function(unused, input) {
            this.name = this.name.replace(/^(product\[)\d+(\].*)$/, function(match, p1, p2) {
                return p1 + (index + 1) + p2;
            });
            if(this.name.indexOf('[order]') > 0) {
                this.value = index + 1;
            }
        });
    });
});
0
Jaromanda X 26 czerwiec 2017, 05:12