Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Dynamiczne tworzenie tabel i w danej tabeli wiersza
#1
Witam, potrzebuję skryptu, który tworzy table z unikalnymi id i w każdej z tych tabel można dodać bądź usunąć dany wiersz.

Próbowałem przerabiać skrypt z tej stronki: http://antczak.org/2009/10/dynamiczne-formularze-z-uzyciem-jquery/ , lecz udało mi się tylko dodać nowe tabele, lecz już nie można w nich dodawać nowych wierszy.

Zna ktoś może jakiś gotowy skrypt lub naprowadzi mnie na rozwiązanie problemu?

Z góry dzięki, pozdrawiam!

P.S Moje dotychczasowe wypociny: http://jsfiddle.net/4ezLX/2/
Odpowiedz
#2
Spróbuj z flexigrid.info - trudno o lepszą wtyczkę do jq na polu zabaw z tabelami.
Ewentualnie datatables.net, ale jeśli mnie pamięć nie myli to edycja krotek wymagała wprzęgnięcia jeszcze jednej wtyczki jq, a nie wiem jak obecnie wygląda sprawa dynamicznego dodawania danych.
Odpowiedz
#3
Ale w tych wtyczkach nie ma możliwości dynamicznego tworzenia nowych tabeli... Jedyną rzeczą jaką posiadają owe wtyczki to możliwość tworzenia nowych wierszy.
Odpowiedz
#4
Sugerowałem się tym co wrzuciłeś na fiddle'a.
Może jtable.org będzie tym czego szukasz ?
Niestety, większość gotowców dotyczy sortowania i filtrowania, nie operacji na tabelach.
Bez własnoręcznie rzeźbionego JS się nie obejdzie.
Odpowiedz
#5
I chyba będę się tym sugerowałem. Ale mam problem z tym bo nigdy większej styczności z JS nie miałem ;/
No nic trzeba będzie jakąś książkę zjeść Big Grin
Odpowiedz
#6
Podpowiem Ci opierając się na własnym doświadczeniu: JS warto znać, choć nauka jest drogą przez mękę.
Natomiast uciekając się do frameworków JS (w moim przypadku JQ) możemy więcej, szybciej, do tego mniejszym nakładem sił.
JQ jest ogółem rzecz biorąc fajny Smile
Mootools nie jest fajny. Przynajmniej dla mnie nie był* Sad
Tylko nie należy zaczynać od d_py strony, tylko poznać metody a przede wszystkim strukturę DOM, bowiem wtedy wiadomo co i jak można ugryźć.
I co najgorsze, JS to wciąż tylko frontend. Żeby zapisać wyniki prac to wciąż za mało.


*dokumentacja, dema, gotowce, więcej niż jedna możliwość rozwiązania problemu świadczy o potędze
Odpowiedz
#7
Udało mi się zrobić to co chciałem, z tym, że potrzebuję nadać ID każdemu wierszu pobrane z tabeli, w szablonie wierszu:

Kod JS:
Kod:
<script type="text/javascript">
            $(document).ready(function(){

                var i = 1;
                var it = 1;

                var szablonWiersza = jQuery.format($("#szablon").val());
                var szablonTabeli = jQuery.format($("#szablonT").val());                

                function dodajTabele() {
                    var iit = it++;
                    
                    $("#ranking").append(szablonTabeli(iit));

                    $("#usunTabele_" + iit).click(function(){
                        $("#listaOsob_" + iit).remove();
                    });
                    
                    $("#dodajW_" + iit).click(function(){
                            var ii = i++;

                            $("#listaOsob_" + iit + " tbody").append(szablonWiersza(ii));
  
                            $("#usunOsobe_" + ii).click(function(){
                                $("#wiersz_" + ii).remove();
                            });
    
                    });
                }

                $("#dodajTabel").click(dodajTabele);
            });
        </script>

#szablon
Kod:
<textarea id="szablon" style="display:none;" cols="1" rows="1">
            <tr id="wiersz_{0}">
                <td></td>
                <td><input type="text" name="w[{id}][name][]"></td>
                <td><input type="text" name="w[{id}][country][]"></td>
                <td><img src="http://antczak.org/source/dynamic_forms/12.png" id="usunOsobe_{0}" alt="usun"></td>
            </tr>
        </textarea>

To id tabeli w której się znajduje musi się znajdować w atrybucie name w miejscu {id} .
Wiesz, może jak to uczynić?
Odpowiedz
#8
Da się to zrobić przy użyciu kilku funkcji.
Nie napiszę Ci na kolanie kodu, ale naprowadzę czego można użyć.

Po wszystkich tabelach i ich komórkach przejedziesz funkcją each()
lecąc po wszystkich tabelach:
$("table").each(function () {
var tableid = $(this).attr('id'); //zgarniamy ID danej tabeli

a w obecnej tabeli jadąc po wszystkich td:
$('td').each(function(){

w atrybut elementu ingerujesz funkcją attr(), załóżmy:
$(this).attr('name', 'newname');

Musisz pokombinować jak przygotować 'newname' do wstawienia.
Nie wiem czy zadziała coś takiego jak łączenie stringów w attr: attr('name', 'w['+tableid+'[country][]')
Być może będziesz musiał przygotować string do podmiany wcześniej.

Utrudnieniem jest to, że wartości name nie są takie same we wszystkich td.
Proponuję zatem żebyś wstawił w atrybut name string (albo dodał klasę) po którym rozpoznasz w JQ w jaką komórkę ingerujesz, a następnie z użyciem if-a wywołasz attr()

Mam nadzieję że w miarę jasno to wytłumaczyłem.
Poczytaj o each() i attr(). Jeśli td wygenerujesz z odpowiednimi klasami, to sprawdzisz je używając .hasClass() i wtedy wywołasz attr.
Odpowiedz


Podobne wątki…
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Dynamiczne odświeżanie strony vakil 4 5,206 02-05-2016, 01:51
Ostatni post: dejdi
  [HTML][CSS] Powtarzanie nagłówka tabeli. ILIES 1 3,019 12-08-2013, 22:42
Ostatni post: Kartofelek
  Złe wyświetlanie tabeli. Intelactive 0 1,742 05-11-2012, 02:19
Ostatni post: Intelactive
  [jquery] wysuwany box po przescrollowaniu danej wysokości n0xx 2 2,771 12-09-2012, 15:34
Ostatni post: n0xx
  Rozciągnięcie wierszy w tabeli dielectric 3 2,062 14-07-2012, 22:38
Ostatni post: kornell

Skocz do:


Użytkownicy przeglądający ten wątek:
Sponsorzy i przyjaciele
SeoHost.pl