łączenie funkcji

0

Witam,
Postanowiłam się nauczyć PHP, a jako że najlepiej idzie mi nauka na czymś co jest mi potrzebne, uczę się na obsłudze formularza stosując przykłady z netu.;) Dotychczas szło mi raz lepiej raz gorzej, ale do przodu a teraz właśnie nadszedł ten moment gdzie utknęłam. W skryptach w JS.
Formularza będzie składał się z 2 części: pierwsza - stała gdzie są dane osobowe i druga - zależna od włączonej przez przycisk warstwy. Wartości formularza będą przesyłane na różne strony z której warstwy będzie naciśnięty przycisk wysyłający (1 warstwa - 1 przycisk na 1 stronę.).
Na razie mam skrypt który sprawdza część pierwszą i to działa z tymczasowym buttonem użytym na potrzeby pracy,
Skrót:

function przetwarzaj_dane ()
    {
      var brakuje_danych=false;
      var formularz=document.forms[0];
      var napis="";
      if (formularz.NAZWISKO.value == ""){
        napis += "Brak w polu Nazwisko\n"
        brakuje_danych=true;
      }

	  if (formularz.IMIE.value == ""){
        napis += "Brak w polu Imię\n"
        brakuje_danych=true;
      }

     if (!brakuje_danych)
        formularz.submit();
	      else
        alert ("Popraw następujące błędy:\n" + napis);
}

Wywołuję to przez <input type="button" name="wyslij" value=" Gotowe " onClick="przetwarzaj_dane()"> (w początku formularza było na jaka stronę ma być on wysłany.)

Mam buttony przełączające warstwy i to też działa.
Teraz chce obsłużyć wysyłanie formularza przyciskiem z warstwy i tu już mam problem.

Próbowałam robić to tak:

function wyslij(to)
	{
		przetwarzaj_dane ()
		if (!brakuje_danych) {
		  formularz.action=('to');
	      formularz.submit();
	  }

i przycisk na warstwie:
<input type="button" name="wyslij" value=" Generuj wniosek do e-ORUS " onclick="wyslij('test.php');">
Próbowałam też tak:
``function testowo()
{
przetwarzaj_dane ()

	if (!brakuje_danych) {
		formularz.action="testowo.php";
		formularz.submit();}
	else
		alert ("Popraw następujące błędy:\n" + napis);
}``

wywoływane przez <input type="button" name="wniosek" value=" Generuj wniosek do Poltax2B-H " onClick="p2b()">
Niestety po naciśnięciu tych przycisków nic się nie dzieje.

Z tego co pamiętam (robiła dużo różnych prób ;)) usunęłam też tą część:
if (!brakuje_danych) formularz.submit(); else alert ("Popraw następujące błędy:\n" + napis);

i w jej miejsce wstawiłam return brakuje_danych;", przenosiłam też deklarację var brakuje_danych=false;
var formularz=document.forms[0];
var napis="";`` ponad funkcję ale to też nie pomogło.

Co robię nie tak? :)

2

Najłatwiej będzie, jak wystawisz gdzieś w necie działający (a raczej niedziałający) przykład swojego html/js, to będzie można obaczyć problem na żywym organizmie.

W powyższych poleceniach nie bardzo rozumiem linię:
formularz.action=('to');
Jak już, to powinno chyba mieć postać
formularz.action = moja_funkcja_obsługi_formularza();

No bo co to jest to 'to'?

2
Vesna77 napisał(a):

Niestety po naciśnięciu tych przycisków nic się nie dzieje.

Czy na pewno nic się nie dzieje? Czy sprawdziłaś konsolę w narzędziach deweloperskich?

0

Freja Draco 'to' to strona na która ma być wysłany formularz tylko oczywiście miało byc bez ' '. :)
Silv dzięki :) Nigdy nie używałam takiego narzędzia, wypróbowałam i okazało się że funkcja która tutaj zapisałam jako "testowo" miała nieodpowiednia nazwę. Zmieniłam ją i jest postęp, tzn. wywołuje funkcję przetwarzaj_dane () ;)

W dalszych testach udało mi sie stworzyć działające coś takiego:

function przetwarzaj_dane(to)
    {
      var brakuje_danych=false;
      var formularz=document.forms[0];
      var napis=""; 
	  
	  
      if (formularz.NAZWISKO.value == ""){
        napis += "Brak w polu Nazwisko\n"
        brakuje_danych=true;
      }

	  if (formularz.IMIE.value == ""){
        napis += "Brak w polu Imię\n"
        brakuje_danych=true;
      }
	  
	  if (!brakuje_danych){
			formularz.action=(to);
			formularz.submit();}
	      else
        alert ("Popraw następujące błędy:\n" + napis); 
        }

wywoływane przez <input type="button" name="wyslij" value=" Gotowe " onClick="przetwarzaj_dane('ba')">

Z tym, że nie do końca mnie to urządza, bo to jest tylko pierwsza część tego co ma być walidowane.

Wolałabym aby działo to mniej więcej w takim schemacie:

function przetwarzaj_dane() { i tutaj walidowana część niezmienna}

function waliduj_wszytko (to) {
       function przetwarzaj_dane()
       Jeśli w części przetwarzaj_dane() wszytko ok to waliduj kolejne pola i jesli ok to wyślij dane na stronę z argumentu "to"}

Tylko już nie mam pomysłu jak to zrobić. Proszę podsuńcie jakieś rozwiązanie :(

0

Dobra, rozumiem, już o co chodzi z podmianą action :)

Natomiast nawiązując do tematu wątku i powyższego posta, to chyba potrzebujesz po prostu wywołać funkcję wewnątrz funkcji:

function moja_funkcja(parametr) {
  podfunkcja1();
  if (cośtam)   podfunkcja2();
}
0

Mniej więcej :)
Z tym, że (cośtam) wynika z podfunkcja1() i wystarczy jak będzie miało wartość false/true.
Po zastanowieniu podfunkcja2 nie jest potrzebna bo ta część formularza zawsze będzie wyglądała inaczej, a co za tym idzie parametr w moja_funkcja() też nie będzie potrzebny bo takich funkcji będzie kilka i w każdej bez problemu przypisze ten action :)
Reasumując, tylko (cośtam) z podfunkcja1() stanowi dla mnie problem :(

2
Vesna77 napisał(a):

Mniej więcej :)
Z tym, że (cośtam) wynika z podfunkcja1() i wystarczy jak będzie miało wartość false/true.

Zatem:


function podfunkcja1() {
  [kod, który nada zmiennej wynik wartość true/false]
  return wynik;
}

function moja_funkcja(parametr) {
  cośtam = podfunkcja1();
  if (cośtam)   podfunkcja2();
}
0
Freja Draco napisał(a):

Zatem:
cośtam = podfunkcja1();

Taaaak! :) To jest to o co mi chodziło :)
@Freja Draco wiszę Ci duuuże piwo/wino/kawę zależnie od tego co preferujesz ;) Nie masz pojęcia jak mi pomogłeś :) Dziękuję :)

3

Możesz też od razu zadeklarować zmienną i przypisać do niej funkcję anonimową

const func1 = function (parameter) {
    console.log(parameter)
}

lub w stylu ES6

const func2 = (parameter) => { 
    console.log(parameter)
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1