Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: aktualny formularz
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
Apo
Witam
Chciałem sie zapytać jak wyświetlić nazwe aktualego formularza. Doszedłem do takiego czegoś:
  1. <form name="foo">
  2. <script type="text/javascript">
  3. alert(this.form.name);
  4. </form>

No i powinno wyswietlic foo, ale tylko błąd wyświetla ;/
TomASS
A tak możesz spróbować? :
  1. function $(id){
  2.      return document.getElementById(id);
  3. }
  4.  
  5. function show_atributes(element){
  6.        var properties;
  7.        for (i in $(element)) {
  8.            properties += i;
  9.            properties += ' , ';
  10.      }
  11.      alert(properties);
  12. }
  13. <form name="foo" id="fff">
  14. <script type="text/javascript">
  15. show_atributes('fff');
  16. alert($('fff').name);
  17. </form>

Czy raczej nie o to chodziło?
Apo
TomASS ty mi napisałeś funkcje w Ajax, a ja chciałem tylko odpowiedz jak moge to uzyskac przez this.form tongue.gif Ale dzięks smile.gif
TomASS
Cytat
TomASS ty mi napisałeś funkcje w Ajax

blink.gif

Przecierz to 'czysty' JS, tak samo jak:
  1. alert(this.form.name);

Możesz napisać:
  1. alert(document.getElementById('fff').name);
Apo
Cytat(TomASS @ 2006-04-20 17:36:36)
Cytat
TomASS ty mi napisałeś funkcje w Ajax

blink.gif

Przecierz to 'czysty' JS, tak samo jak:

hmm takiego czegoś jeszcze nie widziałem $(id) tongue.gif
A to this.form.name jest mi potrzebne do bbcode.
Mam powiedzmy sobie formularz o nazwie 'dodaj_notatki' i w nim przyciski button z akcja onclick do funkcji bbcode. onclick="bbcode(nazwa_form lub element tablicy, '');
No i po kliknięciu jesteśmy odsyłaniu do funkcji:
  1. bbcode(formularz, code)
  2. {
  3. document.form[formularz].poletxt.value += code;
  4. }

I chciałem tez argument 'formularz' właśnie zrobić jako this.form.name przy zdarzeniu onclick smile.gif Tylko nie wiem czy sie da to tak zrobic jak pisze, czy musze napisać funkcje do tego.
TomASS
Zakładam, że te formularze generowane są w jakieś pętli i nie znasz ich dokładnych nazw i ich ilości - bo jeśli byłby jeden formularz to nie ma sensu robić czegoś takiego.

Jeśli jest kilka to możesz zrobić tak podczas generowania formularzy:
1. W pętli generujesz formularz o id='formularz'.$i gdzie $i jest licznikiem
2. Dodajesz funkcje JS bbcode('formularz'.$i,'');
3. Zwiekszasz licznik $i

A funkcja JS wygląda tak:
Kod
function $(id){
     return document.getElementById(id);
}

bbcode(formularz, code){
$('formularz').poletxt.value += code;
}

Może tak być? Mam nadzieję, że dobrze zrozumiałem smile.gif
ali
a jak przekazac nazwe obiektu textarea i input do funkcji?? bo chce zrobic tez cos na wzor bbcode tylko dla kilku okienek z jedna grupa przyciskow b,i,u.... jak narazie to [znaczniki] wskakuja mi do z gory okreslonego textarea, a chcialbym zeby wskakiwaly do tego, ktory akutalnie edytuje
TomASS
To chyba nie tak prosto wykryć textarea, którego właśnie edytujesz, aby przypisać do niego jakąś akcję.

Ja bym to zrobił tak:
1. pole input typu hidden <input type="hidden" id="pole" value="">
2. do kazdego tekstarea dodalbym onClick lub onFocus = 'zmien_wartosc_w_polu_ukrytym_na_id_tego_inp'
3. I teraz w tym polu ukrytym masz id aktualnie edytowanego texarea

Może da się prościej? Tylko jak? blink.gif
LBO
Cytat
Może da się prościej? Tylko jak?

A może do każdego textarea dodać onclick lub onfocus a w tych trigerach wywołać function_action(this.id).

edit: po zastanowieniu chyba o to chodziło TomASS'owi. Ale pokazałem impementacje jego pomysłu:
Kod
id="identyfikator" onclick="passID(this.id)"
ali
dzieki wielkie... meczylem, meczylem i udalo mi sie przerobic na cos takiego
Cytat
<script language="javascript">
var b = 2;

function tag(v, tagopen, newbut, tagclose, oldbut, name, field) {
  if(eval(v)%2 == 0){
   eval("window.document.editform."+name+".value = newbut;");
   var windows = window.document.editform.field.value;
   var tresc = eval("window.document.editform."+windows+".value;");
   eval("window.document.editform."+windows+".value = window.document.editform."+windows+".value + tagopen;");
   eval("window.document.editform."+windows+".focus();");
  }else{
   eval("window.document.editform."+name+".value = oldbut;");

   var windows = window.document.editform.field.value;
   eval("window.document.editform."+windows+".value = window.document.editform."+windows+".value + tagclose;");
   eval("window.document.editform."+windows+".focus();");
  }
  eval(v+"++;");
  }
</script>

<form action="" method="post" name="editform">

<input type="hidden" id="field">
<textarea id="post1" onclick="document.editform.field.value = this.id">tresc post1</textarea><br><br>
<textarea id="post2" onclick="document.editform.field.value = this.id">tresc post2</textarea><br><br>
<textarea id="post3" onclick="document.editform.field.value = this.id">tresc post3</textarea><br><br>

<input type="button" value="B" name="b" onclick="java script:tag('b','', 'B*', '', 'B', 'b', 'document.editform.field.value');" >
<input type="submit">
</form>


... pewnie sie da to jakos zoptymalizowac, no ale nie za bardzo umie js smile.gif
TomASS
@LBO:
Cytat
Cytat
Może da się prościej? Tylko jak?

A może do każdego textarea dodać onclick lub onfocus a w tych trigerach wywołać function_action(this.id).
edit: po zastanowieniu chyba o to chodziło TomASS'owi. Ale pokazałem impementacje jego pomysłu:

Kod
id="identyfikator" onclick="passID(this.id)"

To może lepiej najpierw się zastanowić a później (nie)pisać.

@ali:
Twój skrypt wywala mi błędy JS pod IE.Tak chyba będzie lepiej:

  1. <script language="javascript">
  2. var otwarte = 0;
  3.  
  4. function $(id){
  5.       return document.getElementById(id);
  6. }
  7.  
  8. function dodaj_tag(tag){
  9.      var active = $('field').value;
  10.      if(!otwarte){
  11.            $(active).value=$(active).value+'['+tag+']';
  12.            $('bb_b').value = '/B';
  13.            otwarte = 1;
  14.      }
  15.      else{
  16.            $(active).value=$(active).value+'[/'+tag+']';
  17.            $('bb_b').value = 'B';
  18.            otwarte = 0;
  19.      }
  20.  
  21. }
  22.  
  23. <form action="" method="post" name="editform">
  24. <input type="hidden" id="field">
  25. <textarea id="post1" onclick="document.editform.field.value = this.id">tresc post1</textarea><br><br>
  26. <textarea id="post2" onclick="document.editform.field.value = this.id">tresc post2</textarea><br><br>
  27. <textarea id="post3" onclick="document.editform.field.value = this.id">tresc post3</textarea><br><br>
  28.  
  29. <input type="button" value="B" name="b" id="bb_b" onclick="dodaj_tag('B');" >
  30. <input type="submit">
  31. </form>
Apo
Cytat(LBO @ 2006-04-21 09:46:54)
Kod
id="identyfikator" onclick="passID(this.id)"

Skoro można pobrać nazwe id z aktualnego elementu i przekazać do funkcji (this.id jak jest napisane) to można chyba też przekazać podobnie nazwe formularza przez this ? ale moge sie mylic
TomASS
Nazwe formularza w którym jest element? Czyli w zasadzie nazwę rodzica tego elementu?

Np. name pola text:
  1. <input type="text" name="nazwa" id="ident" onclick="alert(this.name);">

Coś się tak uparł na 'name'? tongue.gif
Sam parametr Name nie zawsze jednoznacznie określa Ci element na stronie.
Apo
Ooooooo TomASS o to mi chodziło tongue.gif Nie chciałem pisac funkcji tylko łatwo to zrobić dlatego sie pytałem 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.