Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [jQuery] Dodawanie nowego inputa
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
#luq
Mam formularz w którym mogę dodać tablice pewnych danych tzn. np. zamawiane produkty: może ich być 0 jak i pińcet. Więc robię inputy dodawane przez JS`a. Jeśli user wypełni ostatni input dodaje się kolejny. W sumie aktualnie rozwiązywałem to tworząc nowe obiekty DOM i wrzucając je w odpowiednie miejsce. Dziś natknąłem się na kod który miałem przerobić a wykorzystywał on jQuery i metode clone(), dziwnie on działał, także nie będę tłumaczył. Przypuśćmy, że mam pierwszy input, np:
  1. <div id="inputs">
  2. <div id="row1">
  3. <input type="text" name="element[1]" />
  4. <input type="text" name="elementId[1]" />
  5. </div>
  6. </div>

I po jego wypełnieniu dodawany jest kolejny, tzn do <div id="inputs"> na końcu dodawane jest:
  1. <div id="row2">
  2. <input type="text" name="element[2]" />
  3. <input type="text" name="elementId[2]" />
  4. </div>

Jak już pisałem, aktualnie dodaje to tworząc przez JS`a nowe elementy
Kod
     var oDiv = document.createElement( 'div' );
         oDiv.setAttribute( 'id', 'row' + nextIndex );
     [...]
     $('#inputs').append( oDiv  );

I teraz pytanie czy jest możliwość napisania tego w taki sposób
Kod
     var oDiv = $('#inputs:last-child').clone();
     // pozamieniaj wszystkie wystąpienia 1 w oDiv na 2
     $('#inputs').append( oDiv  );


Mam nadzieje, że ktoś zrozumie mój bełkot winksmiley.jpg
vokiel
Pobierasz attr('name'), następnie wyrażeniem sprawdzasz co jest pomiędzy [ i ] i dodajesz do tego +1, zmieniasz attr name w ostatnim.

W celu uproszczenia dodałbym atrybut rel równy id, temu co masz w nawiasie kwadratowym.
Wtedy byś robił coś w ten deseń:
Kod
var last = $('#inputs:last-child');
var oDiv = last.clone();
var idx = last.attr('rel');
oDiv.attr('name').replace(idx,(idx+1));
#luq
Ok, tylko mi chodzi o coś w stylu - leć pętlą po dzieciach obiektu i pozmieniaj atrybuty id oraz name (jesli wystepuje w nich 1) na 2
Musze coś takiego zamienić na wersję 1++
Kod
<div class="document_row ajax_row" id="row1">
  <div class="document_field field_product">
    <input autocomplete="off" id="line_1_product_name" class="productAutocomplete" type="text" name="form[line_1][idproduct_name]" />
    <input autocomplete="off" id="line_1_idproduct" class="idproduct pzidproduct" type="text" name="form[line_1][idproduct]" size="3" />
</div>
[...]
</div>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.