Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][JavaScript]Dynamicznie dodawane elementy
Forum PHP.pl > Forum > Przedszkole
newmala
Mam na stronie dynamicznie dodawane treści.
W wyniku tego otrzymuję na stronie zmienną ilość <span class="i">treść</span>.

Jak teraz odczytać te dane po stronie serwera?
Puszy
Jeżeli wartość wpisywana w <span> generowana jest przez JS, musisz wykorzystać do tego AJAX, innego rozwiązania nie widzę.
newmala
Ok, czyli np może też być post? czy tylko ajax zostaje?
[JAVASCRIPT] pobierz, plaintext
  1.  
  2. function odczytaj_dane()
  3. {
  4. var dane = $("span").text();
  5. dane.each(
  6. $post("plik.php", dane);
  7. );
  8. }
  9.  
[JAVASCRIPT] pobierz, plaintext


Nie umiem wpakować danych do tablicy, bo przecież tych danych będzie 0,1 lub wiecej.
Wiem, że mogę sobie je policzyć funkcją lenght, ale jak to złożyć do kupy.
Nie wiem też jak tą funkcję przetestować.
Puszy
Jeżeli chcesz przekazać tablicę do php możesz zrobić to opierając się na plikach .csv

Prześlij do pliku PHP postem albo getem ciąg liczb oddzielony średnikiem

np

dane = '123;abc;12,45;551';

później w php piszesz tak:

  1. $tablica_danych = explode(';', $_POST['dane']);


dzięki temu masz tablicę

  1. Array(
  2. [0] => 123
  3. [1] => abc
  4. [2] => 12,45
  5. [3] => 551
  6. )


a dalej foreach lub co tlyko cchesz
Petre
Ja to swego czasu rozwiązałem tak:

tworzyłem spany, w hidden input wstawiałem w value ilość utworzonych spanów(czyli sczytywałem value z ukrytego hiddena i po dodaniu nowego span zmieniałem jego wartość o 1).

Jeżeli chcesz sczytać wartość spanów to osobiście zawsze można dodać do każdego spana input hidden i value taki sam jak jest podany w span czyli:
  1. <span><input type="hidden" value="1" />1</span>

Następnie uruchamiasz ajaxa i on ładnie widzi Twoje imputy i może obsłużyć po stronie serwera co tylko zechcesz.

Pamiętaj jednak używać LIVE w jquery, żeby widziało dynamicznie utworzone spany i inputy.
Puszy
Cytat(Petre @ 15.05.2012, 14:03:58 ) *
Ja to swego czasu rozwiązałem tak:

tworzyłem spany, w hidden input wstawiałem w value ilość utworzonych spanów(czyli sczytywałem value z ukrytego hiddena i po dodaniu nowego span zmieniałem jego wartość o 1).

Jeżeli chcesz sczytać wartość spanów to osobiście zawsze można dodać do każdego spana input hidden i value taki sam jak jest podany w span czyli:
  1. <span><input type="hidden" value="1" />1</span>

Następnie uruchamiasz ajaxa i on ładnie widzi Twoje imputy i może obsłużyć po stronie serwera co tylko zechcesz.

Pamiętaj jednak używać LIVE w jquery, żeby widziało dynamicznie utworzone spany i inputy.


a nie lepiej użyć id albo własnego atrybutu?

<span id="1">123</span>
<span id="2">abc</span>

W razie potrzeby można potem się do tego odwołać używając id. Wg mnie wstawianie inputa hidden w każdym spanie jest bezcelowe.
d3ut3r
[JAVASCRIPT] pobierz, plaintext
  1. $(document).ready(function(){
  2.  
  3. var wartosci=new Array();
  4.  
  5. $('span.i').each(function(i,e){
  6. wartosci.push($(e).text());
  7. });
  8.  
  9. jQuery.ajax({
  10. url: test.php,
  11. type: "POST",
  12. data: {wartosci: JSON.stringify(wartosci) },
  13. dataType: "json",
  14. success: function(result) {
  15. alert("success");
  16. }
  17. });
  18. });
[JAVASCRIPT] pobierz, plaintext


powinno zadziałać i wysłać Ci tablicę do pliku php
newmala
Dzięki wielkie za podpowiedzi.

Teraz męczy mnie jeszcze problem samego selecta.

  1. <select id="lista_osob" name="lista_osob">
  2. <option value="0"></option>
  3. <option value="1">Kowalski Jan</option>
  4. <option value="2" style="display: none; >Nowacki Błażej</option>
  5. <option value="3">Kaczyński Aleksander</option>


Dołożyłam sobie chowanie wybranych nazwisk na liście.
Ale jak je znowu pokazać, show mi nie chce zadziałać.

[JAVASCRIPT] pobierz, plaintext
  1. $('#remove').live('click',function()
  2. {
  3. var id = $(this).prev().attr('id'); // to mi zwraca option value , który teraz ma być już widoczny, a ma opcję display : none
  4.  
  5. $('#lista_osob[value='+id+']').show(); - wiem , że to jest źle, nie wiem jak zmianić ten display w option o value = id
  6. $(this).parent('td').remove();
  7.  
  8.  
  9. });
[JAVASCRIPT] pobierz, plaintext


Nie umiem po prostu zmienić tego atrybutu, czytam i czytam i nic.



Puszy
Nieogarniam jQuery więc powiem jak to widze w JS:

sposób I:
tworzysz w css dwie klasy i zmieniasz nazwy klasy dla elementu

  1. .hide{
  2. display: none;
  3. }
  4.  
  5. .show{}


sposób II:
zmieniasz atrybut

[JAVASCRIPT] pobierz, plaintext
  1. document.getElementById('id_diwa').setAttribute('style', 'display: none;');
  2. document.getElementById('id_diwa').setAttribute('style', '');
[JAVASCRIPT] pobierz, plaintext
d3ut3r
[JAVASCRIPT] pobierz, plaintext
  1. $("#lista_osob option[value='"+id+"']").hide();
[JAVASCRIPT] pobierz, plaintext


z tym, że pierwszej opcji nie ukryjesz (przynajmniej na chrome) dlatego dobrze jakby pierwsza opcja była typu "Proszę wybrać osobę" itp.

newmala
Świetnie , nigdzie nie mogłam tego dostrzec, że chodzi o brak tego option. Właściwie to nie wiedziałam co z nim zrobić.

Może pomożesz mi jeszcze rozszyfrować dlaczego w wyniku działania mojej funkcji :

[JAVASCRIPT] pobierz, plaintext
  1. $('input#dodaj').click(function(j)
  2. {
  3. var osoba = $('#lista_osob :selected').html();
  4. var id = $('#lista_osob ').val(); //wartość id - option
  5. var str = '<tr>';
  6. str+= '<td> <input type="text" class = "wybrane_osob" id="'+id+'" readonly value ='+osoba+' />'; //a tu nie wiem dlaczego dzieli moją osobę
  7. str+= '<input type="button" id ="remove" value="Usuń" class="btnm"/></td>';
  8. str+= '</tr>';
  9. $('#osoba_ocen').append(str);
  10. $('#lista_osob :selected').hide("normal");
  11.  
  12. $.get("edit.php&id="+id+"&osoba="+osoba+"&akcja=lista_osob"); // tu robię próbę wysyłania do php i jest ok
  13. });
  14.  
[JAVASCRIPT] pobierz, plaintext


Otrzymuję takiego dziwnego inputa w firbugu?
  1. <input id="1" class="lista_osob" type="text" jan="" value="Kowalski" readonly="">

i przez to wyświetla mi się tylko nazwisko,
ale jak już próbuje przesłać dane do php to jednak w pod osoba jest to co ma być.
Co jest nie tak ?
d3ut3r
napisz co chcesz osiągnąć i najlepiej razem z kodem html bo trochę się pogubiłem tongue.gif
newmala
Myślę, że całość html już jest w tym wątku, więc jak możesz to zerknij wyżej, jak nie - daj znać złożę to do kupy.

1.użytkownik wybiera z selecta nazwiska i imiona to działa ok

2.wybrane nazwiska i imiona pojawiają się mu się jako input - ma wyświetlić to co wybrał z selecta - imię i nazwisko i tu nie wiem dlaczego obcina mi imię i tak jak pokazałam wyżej w wyniku działania mojej funkcji otrzymuję takiego dziwnego inputa exclamation.gif!!!!!
- dla użytkownika pokazuje się tylko nazwisko , a imię zapisywane jest automatycznie jako jakiś atrybut , np. jan = ""?questionmark.gifquestionmark.gif

3.może też usunąć wybrane nazwiska za pomocą przycisku i to juz działa ok.

4.teraz akceptuje całość i te dołożone inputy muszę zapisać do bazy, nad tym właśnie pracuję.

Mam nadzieję, że dość znośnie to wytłumaczyłam - jak co daj znaćsmile.gif.

Ok, dzięki wielkie za cierpliwość do mnie, już sobie poradziłam smile.gif)
d3ut3r
[JAVASCRIPT] pobierz, plaintext
  1.  
  2. str+= '<td> <input type="text" class = "wybrane_osob" id="'+id+'" readonly value ="'+osoba+'" />'; //a tu nie wiem dlaczego dzieli moją osobę
  3.  
[JAVASCRIPT] pobierz, plaintext


brakujący cudzysłów smile.gif
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.