Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ajax] Dynamiczna zmiana zawartości form
Forum PHP.pl > Forum > XML, AJAX > AJAX
chomiczek
Mam taki problem, a mianowice w koszyku chciałbym zmieniać ilość produktów, a następnia chciałbym, zeby mi sie automatycznie zmieniła zawartośc wygenerowaniej tabeli.. tzn. cena łączna za określoną ilośc produktyów i cena za całą zawartośc koszyka.

Znalazłem http://advajax.anakin.us/phpsolutions/3.php wprawdzie nie działa, ale można pobrać wersje offline i tam jest ok.

Pytanie jak robić lepiej, tzn. w XMLu generować całą nową tabele i ją wyświetlać, czy tylko generować te pola, które się zmieniły.

W drugimy przypadku musiałbym dynamicznie zmieniać zawartosc JS, wprawdzie nie ma z tym problemu, ale pytanie czy to ma sens??

Może ma ktoś jakieś gotowe rozwiązanie?
escaflowne
Z moich zabaw ("czystym" AJAXem) wynika, że:
nie da się np. wstawić dodatkowego rzędu (<tr></tr>) do tabeli (<table></table>) poprzez JavaScriptowe .innerHTML. Przeglądarka (przynajmniej Mozilla Suite, nie testowałem pod innymi) nie interpretuje kodu tabeli po raz wtóry i to co miało być dodatkowym wierszem, pojawia się u góry strony (jako treść poza tabelą).
Niemniej przyznam się szczerze, że nie testowałem czy można np. zmienić zawartość jednej pojedyńczej komórki (<td></td>) poprzez .innerHTML, niemniej wydaje mi się, że taka modyfikcja zawartości strony zostałaby poprawnie wyświetlona.
chomiczek
sądze, że nie masz racji, bo przecież nie musisz mieć w kodzie tabeli, a np. znacznik
  1. <div id="tutajBedzieTabela"></div>
a następnie w JS podmieniać zawartość 'tutajBedzieTabela' i w JS preparowac układ tabeli etc.
hawk
PPK na quirksmode zamieścił kiedyś obszerne zestawienie, jak można generować w JS tabele, wraz z pomiarami wydajności i testami przeglądarek.

Jeżeli nie zmieniasz struktury tabeli, to najlepszy będzie innerHTML oczywiście. Jeżeli zmieniasz (np. dodajesz wiersze), to już zależy od przeglądarki i trzeba wybrać najbardziej optymalny sposób.
escaflowne
Cytat(chomiczek)
sądze, że nie masz racji, bo przecież nie musisz mieć w kodzie tabeli, a np. znacznik
  1. <div id="tutajBedzieTabela"></div>
a następnie w JS podmieniać zawartość 'tutajBedzieTabela' i w JS preparowac układ tabeli etc.

Możliwe, że wyraziłem się zbyt skrótowo, przydałby się przykład. Miałem na myśli modyfikację zawartości tabeli np. takiej:
  1. <tr>
  2. <td>Id</td>
  3. <td>Imie</td>
  4. <td>Nazwisko</td>
  5. </tr>
  6. <div id="tab_wiersz">
  7. </div>


Plus kod w JS:
  1. tresc  = '<tr><td>1</td><td>Jan</td><td>Kowalski</td></tr>\n';
  2. tresc += '<tr><td>2</td><td>John</td><td>Smith</td></tr>';
  3.  
  4. document.getElementById('tab_wiersz').innerHTML = tresc


Tak jak wspominałem, taka "konstrukcja" w Mozilli się rozjeżdża.
LBO
nie znam sie na AJAXIE, ale moze za kazdym razem do diva cala tabele "wpisuj"? a nie wiersz... cos takiego nie przejdzie (szczegolnie walidacji..:/)
chomiczek
Ciekawe dlaczego miałoby nie przejść walidacji??
Przecież kod jaki będzie widoczny to:
  1. <div id='tutajBedzieTabela'></div>


* tutajBedzieTabela nie jest informacją o tym, ze tam zostanie wklejony kod tabeli, a okresla w jakim ID ta tabele będzie się miała pojawić, tzn. w tym przypadku jesli w JS odwołam sie do tutajBedzieTabela to tabela za pomocą inner.HTML zostanie włożona w środek tego diva
  1. <div id='tutajBedzieTabela'>TU BDZIE WŁOŻONA TABELA</div>
, jednak podglądając kod zobaczymy pustego DIVa z określonym ID.
LBO
Cytat
</tr>
<div id="tab_wiersz">
</div>
</table>

to to jest mozliwe? DIV pomiedzy </tr> a </table>

sorcia, escaflowne cos takiego wkleil.. myslalem, ze ty... sorki jeszcze raz
escaflowne
Cytat(LBO)
Cytat
</tr>
<div id="tab_wiersz">
</div>
</table>

to to jest mozliwe? DIV pomiedzy </tr> a </table> [...]

Prawdę mówiąc, nie mam na chwilę obecną innego pomysłu jak dopisać JavaScriptem kilka wierszy do tabeli.
chomiczek
Hmm.. div był przykładem, równie dobrze możesz napisać <tr id="dynamicznie>TUTAJ BDĄ INNE TD</tr>
jeśli jednak w JS dynamicznie otrzyma wartosc np. <td>x</td><td>sds</td> to zostanie nadpisane TUTAJ BDĄ INNE TD

i niechodzi o to do czego schodzimy, bo wygenerowanie całej tabeli w XMLu to nie problem, problem jest wtedy kiedy chce żeby zmienila mi sie tlyko jedna zawartość..
nospor
Tak czytam i czytam i juz nie wiem o co chodzi smile.gif
Chcesz zmienic tylko daną komórkę w tabeli? Zaden problem w js. Zalozmy ze chcesz zmienic drugą komorke w ostatnim wierszu:
  1. <script language="javascript" type="text/javascript">
  2.  
  3. function changeTable(){
  4.  
  5. table = document.getElementById('tab');
  6. size = table.rows.length;
  7. lastRow = table.rows[size - 1];
  8. cells = lastRow.cells;
  9. cells[1].innerHTML = 'zmieniam';
  10.  
  11. }
  12.  
  13.  
  14.  
  15.  
  16. <table id="tab">
  17. <tr>
  18. <td width="50%">1,1</td>
  19. <td width="50%">1,2</td>
  20. </tr>
  21. <tr id="a2">
  22. <td width="50%">2,1</td>
  23. <td width="50%">2,2</td>
  24. </tr>
  25. <input type="button" onclick="changeTable()" />


edit: ale chyba nie oto ci chodzilo... sad.gif
chomiczek
no własnie ja tez tak czytam i czytam.. i też doszedłem do wniosku, ze jednak nie o to mi chodziło.. a mianowicie.. hmm.. moze inaczej.. tutaj mam linke:
http://karamanski.pl/sklepik/koszyk.php?kosmetyk=168||add dodany zostanie od razu dodany do koszyka jeden produkt.. chodzi mi o to, żeby móc np. wpisać wartość 2 i poprzez wciśnięcie enteru powinni się zmienic ceny:
ZAWARTOŚĆ KOSZYKA: lewy róg
cena łącz: tabela
DO ZAPŁATY: te kwoty powinny się przeliczć, a w bazie oczywiście powinna znaleźć się informacja o 2 produktach tego typu.
nospor
Teraz i ja rozumiem smile.gif
mozesz dodac wpis do bazy ajaxem, i zwrocic ajaxem nową sumę. Tę wartośc zapodać do funkcji co napisalem (bądź też do innej podobnej)i nią zmienic wartośc tej komórki.
chomiczek
Udało mi sie w końcu napisać (4 godziny snu to jednak za mało... i jak ktoś napisał chyba na php.pl - nie kazuj programistą pracować po godzinach, w celu szybszego zakończenia projektu, bo projekt nie będzie zakończony na czas.)

Wracając do myśli przewodniej:
pod FF działa, a pod IE mam komunikat: NIEZNANY BŁAD CZASU WYKONYWANIA (?)

linka: http://karamanski.pl/sklepik/koszyk.php?kosmetyk=221||add
matheush
Cytat(chomiczek @ 6.04.2006, 14:29 ) *
pod FF działa, a pod IE mam komunikat: NIEZNANY BŁAD CZASU WYKONYWANIA (?)


Witam,
być może niepotrzebnie odgrzewam kotleta, ale komuś może się przydać.

W testowym, nowym projekcie też miałem ten problem i nie mogłem znaleźć rozwiązania.

Otórz IE wywala ten komunikat kiedy jest błąd składni HTML (o dziwo!)

Zauważyłem to kiedy przerabiałem strone z html, na xhtml + css.

Morał: bałagan kodu przy budowie strony jest zły.

pozdrawiam,
matheush
gWd
Właśnie męczę się z tym problemem od dłuższego czasu. Znalazłem wyjaśnienie (może komuś się przyda):

"Okazuje sie ze IE nie pozwala na przypisywanie wartosci poprzez innerHTML dla elementow tabeli innych niz:
CAPTION
TD
TH"
gebp
a czy z div'ami nie ma tego problemu questionmark.gif? Bo właśnie się z tym męczę.
Próbka
Hasło i Login : test
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.