Autor Zpráva
Majo
Profil *
Mám na stránke viacero formulárov.
Viem ako spracovať jeden pomocou javascriptu (jquery), ale neviem ako zistím ktorý z tých viacerých formulárov bol práve odoslaný. V každom tom formuláry mám tie isté názvy objektov - dva selecty a jeden hidden. Menia sa iba ich hodnoty value.
Keeehi
Profil
Majo:
Něco musíte mít rozdílné, jinak to nepoznáte. Co třeba name u formu?
mattyZEM
Profil
Keeehi:
Co třeba name u formu?
Chamurappi říkal, že se neodesílá...

Majo:
Vytvoř si u každého formuláře jeden hidden input který bude mít rozdílný název. Pak jen ověříte jestli byl isset($_POST['nazev']))
Majo
Profil *
Keeehi:
A ako by to vyzeralo v praxi?

mattyZEM:
Nechápem presne ako to myslíš. V kóde javascriptu, ktorý mi bude odosielať údaje do druhého php súboru by som už mal mať hodnoty z toho konkrétneho formulára, nie? A ako zistím v tom javascripte, ktorý to bol formulár?
mattyZEM
Profil
Majo:
A ako zistím v tom javascripte, ktorý to bol formulár?
Javascript neovládám, ale v PHP by to bylo jak jsem říkal if(isset($_POST['nazev_skryteho_inputu']))

Nechápem presne ako to myslíš
<form>
<input type="hidden" name="skryty_prvni" value="">
</form>

<form>
<input type="hidden" name="skryty_druhy" value="">
</form>
Keeehi
Profil
Majo:
JavaScript - Události onsubmit()
Majo
Profil *
mattyZEM:
Javascript neovládám, ale v PHP by to bylo jak jsem říkal if(isset($_POST['nazev_skryteho_inputu']))
To je škoda, v php by som vedel ako na to, ale potrebujem to práve v tom javascripte.

<form>
<input type="hidden" name="skryty_prvni" value="">
</form>
>
<form>
<input type="hidden" name="skryty_druhy" value="">
</form>
To som pochopil, ale ako v kóde javascriptu zistím, že bol odoslaný formulár napr. s hidden name "skryty_druhy"?
Keeehi
Profil
takto
<form onsubmit="alert('první');">
...
...
...
</form> 

<form onsubmit="alert('druhy');">
...
...
... 
</form>
Majo
Profil *
Keeehi:
Ok, to mi vypíše hlášku podľa toho ktorý formulár odošlem.
Ale ako v javascripte vytiahnem to 'první' a ako následne podľa neho vyberiem požadované hodnoty.
Majo
Profil *
Pre ukážku, takto vyzerajú formuláre: (počet nie je vždy rovnaký)

<form action="" method="post" name="form1">
     <select name="vaha">
             <option value="10">10g</option>
             <option value="22">20g</option>
    </select>
     <select name="mnozstvo">
             <option value="1">1</option>
             <option value="2">2</option>
    </select>
    <input type="Submit" name="odosli" value="OK" />
    <INPUT type="hidden" NAME="id"  value="1" />
</form>
<form action="" method="post" name="form2">
     <select name="vaha">
             <option value="10">10g</option>
             <option value="22">20g</option>
    </select>
     <select name="mnozstvo">
             <option value="1">1</option>
             <option value="2">2</option>
    </select>
    <input type="Submit" name="odosli" value="OK" />
    <INPUT type="hidden" NAME="id"  value="2" />
</form>
<form action="" method="post" name="form3">
     <select name="vaha">
             <option value="10">10g</option>
             <option value="22">20g</option>
    </select>
     <select name="mnozstvo">
             <option value="1">1</option>
             <option value="2">2</option>
    </select>
    <input type="Submit" name="odosli" value="OK" />
    <INPUT type="hidden" NAME="id"  value="3" />
</form>


A vždy po kliknutí na tl. OK potrebujem pomocou jquery odoslať hodnoty vaha, mnozstvo a id do súboru napr. spracuj.php.
Majo
Profil *
Nikto nevie poradiť?
Fred
Profil
Nechápu, proč to nepošleš přes action?

<form action="spracuj.php?form=form1" method="post">
<form action="spracuj.php?form=form1" method="post">
<form action="spracuj.php?form=form1" method="post">
Majo
Profil *
Fred:
Pretože ja to potrebujem odoslať a spracovať na pozadí bez otvorenia novej stránky, resp. načítania tej istej. Preto k tomu chcem použiť jquery.
Yur4Y
Profil
Majo:
Tak si nevytvárajte skrytý input s rozdielnym name, ale vždy s rovnakým name a rozdielnym value.
<input type=hidden name=formular value=prvy>
...
<input type=hidden name=formular value=druhy>
Majo
Profil *
Yur4Y:
To stále chápem, vo formulároch nevidím problé, ale v tom ako to mám na pozadí poslať cez jquery.
Baggz
Profil
Tak např.

<form action="" method="" name="formular-1">
  
  <!--  Obsah formuláře 1 -->
  
</form>

<form action="" method="" name="formular-2">
  
  <!--  Obsah formuláře 2 -->
  
</form>


$("form[name='formular-1']").submit(function() {

  alert("Formulář 1 byl odeslán.");
  return false;
  
});

$("form[name='formular-2']").submit(function() {

  alert("Formulář 2 byl odeslán.");
  return false;
  
});
Chamurappi
Profil
Reaguji na Maja:
Moc ti nerozumím. Všechny výše uvedené rady jsou správně.

vo formulároch nevidím problé, ale v tom ako to mám na pozadí poslať cez jquery
V tom případě je tento dotaz duplicitní k spracovanie formulára na pozadí pomocou jquery, kde jsem ti na stříbrném podnose dal hotové řešení (menší než jQuery). Nikdy nezakládej duplicitní vlákna.


Reaguji na Baggza:
Tvůj skript neodesílá formuláře na pozadí. Jen jejich odeslání stornuje a vyhodí alert.
Baggz
Profil
Chamurappi:
Ano, kompletní řešení by mohlo vypadat například takto.

$("form[name='formular-1']").submit(function() {

  $.ajax({
    type: "POST",
    url: "some.php",
    data: "",
    success: function(){

      alert("Formulář 1 byl odeslán.");

    }
  });
  
  return false;
  
});
Chamurappi
Profil
Reaguji na Baggza:
Nemohlo. Tvůj skript neodesílá formuláře na pozadí.
Baggz
Profil
Chamurappi:
Ale ano. V momentě, kdy uživatel stiskne tlačítko „Odeslat“, se formulář odešle přes AJAX.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: