Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pobranie wartości z inputa js w Smarty
Forum PHP.pl > Forum > Gotowe rozwiązania > Systemy szablonów
chyzio
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
ziqzaq
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.
chyzio
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>
ziqzaq
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
chyzio
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)
ziqzaq
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?).
chyzio
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. }
ziqzaq
  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.
chyzio
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}
ziqzaq
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?
chyzio
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
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.