Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][JavaScript]Dynamicznie dodawane elementy
newmala
post
Post #1





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 17.01.2012

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
Puszy
post
Post #2





Grupa: Zarejestrowani
Postów: 279
Pomógł: 42
Dołączył: 10.10.2011

Ostrzeżenie: (0%)
-----


Jeżeli wartość wpisywana w <span> generowana jest przez JS, musisz wykorzystać do tego AJAX, innego rozwiązania nie widzę.
Go to the top of the page
+Quote Post
newmala
post
Post #3





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 17.01.2012

Ostrzeżenie: (0%)
-----


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ć.

Ten post edytował newmala 14.05.2012, 16:29:17
Go to the top of the page
+Quote Post
Puszy
post
Post #4





Grupa: Zarejestrowani
Postów: 279
Pomógł: 42
Dołączył: 10.10.2011

Ostrzeżenie: (0%)
-----


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

Ten post edytował Puszy 15.05.2012, 12:34:34
Go to the top of the page
+Quote Post
Petre
post
Post #5





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 12.05.2012

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Puszy
post
Post #6





Grupa: Zarejestrowani
Postów: 279
Pomógł: 42
Dołączył: 10.10.2011

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
d3ut3r
post
Post #7





Grupa: Zarejestrowani
Postów: 709
Pomógł: 176
Dołączył: 24.10.2010

Ostrzeżenie: (0%)
-----


[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

Ten post edytował d3ut3r 15.05.2012, 13:42:47


--------------------
http://d3ut3r.wordpress.com/ | mysql_* jest przestarzałe UŻYWAJ PDO!
Go to the top of the page
+Quote Post
newmala
post
Post #8





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 17.01.2012

Ostrzeżenie: (0%)
-----


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.



Go to the top of the page
+Quote Post
Puszy
post
Post #9





Grupa: Zarejestrowani
Postów: 279
Pomógł: 42
Dołączył: 10.10.2011

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
d3ut3r
post
Post #10





Grupa: Zarejestrowani
Postów: 709
Pomógł: 176
Dołączył: 24.10.2010

Ostrzeżenie: (0%)
-----


[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.



--------------------
http://d3ut3r.wordpress.com/ | mysql_* jest przestarzałe UŻYWAJ PDO!
Go to the top of the page
+Quote Post
newmala
post
Post #11





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 17.01.2012

Ostrzeżenie: (0%)
-----


Ś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 ?

Ten post edytował newmala 15.05.2012, 16:23:39
Go to the top of the page
+Quote Post
d3ut3r
post
Post #12





Grupa: Zarejestrowani
Postów: 709
Pomógł: 176
Dołączył: 24.10.2010

Ostrzeżenie: (0%)
-----


napisz co chcesz osiągnąć i najlepiej razem z kodem html bo trochę się pogubiłem tongue.gif


--------------------
http://d3ut3r.wordpress.com/ | mysql_* jest przestarzałe UŻYWAJ PDO!
Go to the top of the page
+Quote Post
newmala
post
Post #13





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 17.01.2012

Ostrzeżenie: (0%)
-----


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)


Ten post edytował newmala 15.05.2012, 21:15:06
Go to the top of the page
+Quote Post
d3ut3r
post
Post #14





Grupa: Zarejestrowani
Postów: 709
Pomógł: 176
Dołączył: 24.10.2010

Ostrzeżenie: (0%)
-----


[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

Ten post edytował d3ut3r 16.05.2012, 05:14:18


--------------------
http://d3ut3r.wordpress.com/ | mysql_* jest przestarzałe UŻYWAJ PDO!
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 23:32