Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Pobranie wartości z inputa js w Smarty
chyzio
post 27.01.2009, 17:24:29
Post #1





Grupa: Zarejestrowani
Postów: 93
Pomógł: 0
Dołączył: 12.03.2006

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


Witam wszystkich!

Następujący formularz a w nim

  1. <form name="form_grupy" method="post" action="index.php">
  2. ...
  3.  
  4. <td><input name="opis" type="text" class="s_pole_txt" value="jakis napis" onChange="aktualizuj_grupe()"/></td>
  5.  
  6. ...
  7.  


teraz tak z java scriptu (dokładnie jquery) odwoluje sie do zmiennej w nastepujacy sposob:

  1. id_grupy: document.form_grupy.opis.value


zmienna id_grupy nie przyjmuje wartosci pomimo jej wyswietlania w szablonie smarty
Go to the top of the page
+Quote Post
ziqzaq
post 27.01.2009, 18:10:20
Post #2





Grupa: Zarejestrowani
Postów: 428
Pomógł: 128
Dołączył: 17.06.2007

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


1) Co pytanie ma wspólnego z systemem szablonów?
2)
  1. // przypisanie wartości zmiennej
  2. var moja_zmienna = document.formik.pole.value;
  3. alert(moja_zmienna);
  4.  
  5. // przypisanie wartosci w tablicy
  6. var moja_tablica = { 'tutaj_klucz' : document.formik.pole.value };
  7. alert(moja_tablica['tutaj_klucz']);
  8.  
  9. // lub jesli sie upierac przy jquery to np.
  10. var moja_zmienna = $('form[name=formik] > input[name=pole]').val();
  11. alert(moja_zmienna);


edit:
3)
Cytat
zmienna id_grupy nie przyjmuje wartosci pomimo jej wyswietlania w szablonie smarty

Może pokaż kod (wyświetlanie) jestem ciekaw jak się odwołujesz do tej zmiennej.
4) Używając jquery można pozbyć się js z elementów html np.
  1. <input name="opis" type="text" class="s_pole_txt" value="jakis napis" onChange="aktualizuj_grupe()"/>

poprzez podpinanie zdarzeń w head (bądź w skryptach includowanych). Jquery events.

Ten post edytował ziqzaq 27.01.2009, 18:34:58
Go to the top of the page
+Quote Post
chyzio
post 27.01.2009, 18:45:02
Post #3





Grupa: Zarejestrowani
Postów: 93
Pomógł: 0
Dołączył: 12.03.2006

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


1. Podobny temat o smarty był w tym dziale więc dlatego tu zapytałem

Ok nie ważnie czy to jQuery czy js

  1. function aktualizuj_grupe(){
  2.  
  3.  
  4. var moja_zmienna = document.form_grupy.nazwa.value;
  5. alert(moja_zmienna);
  6.  
  7. }


js wyświetla alert z napisem "undefined"

Jak się odwołuje w smarty to nie ma absolutnego znaczenia w poniższym też nie działa

  1. <td><input name="opis" type="text" class="s_pole_txt" value="tutaj opis" onChange="aktualizuj_grupe()"/></td>
Go to the top of the page
+Quote Post
ziqzaq
post 27.01.2009, 19:00:48
Post #4





Grupa: Zarejestrowani
Postów: 428
Pomógł: 128
Dołączył: 17.06.2007

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


Jakiej przeglądarki używasz?
Mi na Operze 9.60 i FF 3 twój kod działa bez problemu.
Spróbuj może czegoś takiego, w head (wymagane jquery):
Kod
<script type="text/javascript">
function aktualizuj(el) {
    alert(el.val());
}
$(document).ready(function(){
    $('form[name=form_group] > input[name=opis]').bind('change', function () {
        aktualizuj($(this));
    });
});
</script>

Przykładowy formularz:
  1. <form name="form_group" action="test.php" method="post">
  2. <input type="text" name="opis" value="jakiś opis" />
  3. </form>

PS jeśli się dobrze orientuję to zdarzenie "onchage" w tym przypadku będzie działać jak "onblur" i chyba właśnie to ostatnie lepiej tu pasuje - ale tutaj mogę się mylić.

Cytat
Jak się odwołuje w smarty to nie ma absolutnego znaczenia w poniższym też nie działa

Chodziło mi właśnie o odwołanie w javascript nie o smarty winksmiley.jpg

Ten post edytował ziqzaq 27.01.2009, 19:02:21
Go to the top of the page
+Quote Post
chyzio
post 27.01.2009, 19:32:18
Post #5





Grupa: Zarejestrowani
Postów: 93
Pomógł: 0
Dołączył: 12.03.2006

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


On blur nie jest właściwym rozwiązaniem u mnie. Właśnie problem w tym że owy kod działa tyle że jak wrzucę go do .tpl smarty to nie działa sad.gif

Interesuje mnie odwołanie

  1. document.form_grupy.nazwa.value


czy przy użyciu smarty to jest prawidłowe ?

jak wyrzucę inputa i tekst włoże pomiędzy
  1. <div id="nazwa">tekst</div>
i odwołam się do niego

  1. nazwa: document.getElementById('nazwa');


to oczywiście działa exclamation.gif!! (przypisanie : z jq)

Ten post edytował chyzio 27.01.2009, 19:35:15
Go to the top of the page
+Quote Post
ziqzaq
post 27.01.2009, 19:39:48
Post #6





Grupa: Zarejestrowani
Postów: 428
Pomógł: 128
Dołączył: 17.06.2007

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


Cytat
czy przy użyciu smarty to jest prawidłowe ?

Zademonstruj kod o który ci chodzi bo trochę nie kumam.
Smarty to system szablonów, wprawdzie nie używam go, ale co on miałby z tym wspólnego (no chyba że używasz w zapisie js jakichś ciągów znaków parsowanych przez Smarty)?

PS a jak dasz pole input z id i odwołasz się do niego po id?

Edit:
Jeszcze jedno. Sprawdzałeś źródło strony po użyciu Smarty?

Edit2:
Kod
nazwa: document.getElementById('nazwa');

Znowu dajesz kod wyciągnięty niewiadomo skąd. Jeśli to jest przypisanie w JS wartości do zmiennej to nie spotkałem się z takim sposobem - IMHO nie zadziała chyba że jest do tego jakiś kontekst (tablica?).

Ten post edytował ziqzaq 27.01.2009, 19:58:30
Go to the top of the page
+Quote Post
chyzio
post 27.01.2009, 19:54:28
Post #7





Grupa: Zarejestrowani
Postów: 93
Pomógł: 0
Dołączył: 12.03.2006

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


Ok na potrzeby forum w wersji lite:

plik grupy.tpl
  1. {section name=grupy loop=$grupy}
  2.  
  3. <form name="form_grupy">
  4. <input type="hidden" name="id_grupy" value="napis" onChange="aktualizuj_grupe() />
  5. </form>
  6.  
  7. {/section}



no i w pliku header.tpl

  1. function aktualizuj_grupe(){
  2.  
  3. $.POST("index.php",
  4.  
  5. {
  6.  
  7. ...
  8. nazwa: document.form_grupy.nazwa.value ,
  9. ...
  10.  
  11. },
  12.  
  13. ...
  14. }


Ten post edytował chyzio 27.01.2009, 19:54:47
Go to the top of the page
+Quote Post
ziqzaq
post 27.01.2009, 20:03:50
Post #8





Grupa: Zarejestrowani
Postów: 428
Pomógł: 128
Dołączył: 17.06.2007

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


  1. {section name=grupy loop=$grupy}
  2.  
  3. <form name="form_grupy">
  4. <input type="hidden" name="id_grupy" value="napis" onChange="aktualizuj_grupe() />
  5. </form>
  6.  
  7. {/section}

Czyli mam rozumieć, że tworzysz więcej niż jeden formularz z name="form_grupy" (loop=$grupy) a później próbujesz odwołania document.form_grupy.opis.value? To skąd interpreter ma wiedzieć o który "form_grupy" ci chodzi hę? smile.gif
Nadaj formularzom różne id i/lub name i posługuj sie tymi unikalnymi wartościami do rozróżnienia formularzy.

Ten post edytował ziqzaq 27.01.2009, 20:07:29
Go to the top of the page
+Quote Post
chyzio
post 27.01.2009, 20:40:43
Post #9





Grupa: Zarejestrowani
Postów: 93
Pomógł: 0
Dołączył: 12.03.2006

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


Jej interpreter wie bo cały kod wygląda tak

  1. {section name=grupy loop=$grupy}
  2.  
  3. {if $smarty.section.grupy.first}
  4. <form name="form_grupy" method="post" action="index.php">
  5. <table width="650" border="0" align="left" cellpadding="0" cellspacing="0">
  6. <tr>
  7. <th width="117" class="grupy_podpis_kolumny" scope="row">L.p</th>
  8. <th width="216" class="grupy_podpis_kolumny" scope="row"><label>Nazwa Grupy </label></th>
  9. <td with="216" class="grupy_podpis_kolumny">Uprawnienia</td>
  10. <td width="200" class="grupy_podpis_kolumny">Opis grupy </td>
  11. </tr>
  12. {/if}
  13.  
  14.  
  15. <tr>
  16. <th scope="row"><input name="lp" id="id_grupy" type="text" class="s_pole_txt_50" value="{$grupy[grupy].id_grupy}" onChange="aktualizuj_grupe({$grupy[grupy].id_grupy})"/></th>
  17. <th scope="row"><input name="nazwa" id="nazwa" type="text" class="s_pole_txt" value="{$grupy[grupy].nazwa}" onChange="aktualizuj_grupe({$grupy[grupy].id_grupy})" /></th>
  18. <td><input name="uprawnienia" id="uprawnienia" type="text" class="s_pole_txt" value="{$grupy[grupy].uprawnienia}" onChange="aktualizuj_grupe({$grupy[grupy].id_grupy})"/></td>
  19. <td><input name="opis" id="opis" type="text" class="s_pole_txt" value="{$grupy[grupy].opis}" onChange="aktualizuj_grupe()"/></td>
  20. </tr>
  21.  
  22.  
  23. {if $smarty.section.grupy.last}
  24. <tr>
  25. <th colspan="4" scope="row"> <a href="#" onclick="nowa_grupa();"><input value="Nowa grupa" type="button" class="button_grupa"></a></th>
  26. </tr>
  27. </table>
  28. </form>
  29. {/if}
  30.  
  31.  
  32.  
  33. {/section}


Ten post edytował chyzio 27.01.2009, 20:41:01
Go to the top of the page
+Quote Post
ziqzaq
post 27.01.2009, 20:48:38
Post #10





Grupa: Zarejestrowani
Postów: 428
Pomógł: 128
Dołączył: 17.06.2007

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


Cytat
Jej interpreter wie bo cały kod wygląda tak

Interpretuję twój kod, nie posiadam magicznej kuli.
Pisałem wcześniej o sprawdzeniu źródła wygenerowanej strony (już w przeglądarce), zrobiłeś to? Sprawdź czy Smarty ci nie chrzani kodu js (np. czy używając takiego {jakiś kod} zapisu Smarty nie ingeruje w niego). Jeśli tak to wrzuć kod js do zewnętrznych plików i po sprawie.

Edit: Stosowałeś się może do rad z tego postu?

Ten post edytował ziqzaq 27.01.2009, 20:51:04
Go to the top of the page
+Quote Post
chyzio
post 27.01.2009, 20:51:48
Post #11





Grupa: Zarejestrowani
Postów: 93
Pomógł: 0
Dołączył: 12.03.2006

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


Problem rozwialem dodajac id do inputa a pozniej w przypisaniu
  1. document.getElementById('nazwa').value,
ok 4 godzin zajęło mi to sad.gif ziqzaq dziłękuje za szczerą chęć pomocy smile.gif

Ten post edytował chyzio 27.01.2009, 20:52:12
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 Wersja Lo-Fi Aktualny czas: 23.06.2025 - 21:07