Autor Zpráva
snazimse
Profil
Zdravím,

nevím si rady,s tímhle přemýšlel jsem nad tím zkoušel,
snad tisíc způsobů ,ale nic nefunguje,jak má.

Jedná se o funkci .submit() v jquery.
Funguje to perfektně,ale jen když kliknu na submit,dělá to co má v tomto případě.
$('form').submit(function(){
   $(this).attr('action',$(this).attr('action')+$('#cat').val());
  });
  

Ale já bych potřeboval to automaticky spouštět.

Myslel jsem ,že by to mělo jít nějak takto:

$('form').submit()({
   $(this).attr('action',$(this).attr('action')+$('#cat').val());
   });

Zkoušel,jsem závorky,různě,nevím jak přesně to zapsat,ale prostě,vyzkoušel jsem všechno,a nic mi nepomohlo,jak prosím na to?

Díky všem!
MartinP
Profil *
$('form').submit(function(){
   $(this).attr('action',$(this).attr('action')+$('#cat').val());
  }).submit();
juriad
Profil
snazimse:
Jak píše MartinP.

Rozeberu to:
$ je funkce, které je předán jeden argument - string 'form'.
Tato funkce vrací objekt, který obaluje element form a který má metodu submit, která příjmá určitý počet argumentů.
Pokud je jí zadán jeden argument typu funkce, tak zaregistruje posluchače události submit.
Není-li ji zadán žádný argument, vytvoří událost submit.
Tato metoda submit vrací objekt nad kterým byla zavolána.

Metodě submit je nejprve předána anonymní funkce, která nechce žádný argument, ale její volající slibuje, že v this bude objekt formuláře.
Tato funkce neprve předá this (objekt formuláře) funkci $, která vrátí nějaký objekt, který obaluje objekt formuláře.
Tento objekt má metodu attr, která chce dva jeden nebo dva argumenty.
Pokud je jí zadán jeden argument, vrátí hodnotu atributu elementu, který reprezentuje.
Jsou-li jí předány dva argumenty nastaví atribut (první argument) na hodnotu druhého argumentu.

V tomto případě se bude nastavovat hodnota attributu 'action' elementu form na výsledek volání $(this).attr('action')+$('#cat').val()
Opět se předá this funkci $, která vrátí objekt obalující objekt formuláře a je zavolána metoda attr, tentokrát s jedním argumentem.
Vrátí tedy hodnotu atributu 'action'.
Dále se předá řetězec '#cat' funkci $, která v tomto případě v html dokumentu nalezne element s id="cat" a vrátí obalený tento element.
Tento obalený element má metodu val, která chce žádný nebo jeden argument.
V případě, že jí není žádný předán (jako tady), vrátí hodnotu elementu (jelikož tato metoda funguje jen s formulářovými políčky, mužeme předpokládat, že se jedná o nějaký prvek ve formuláři).

Následně tyto dvě informace (atribut action a hodnota catu) jsou spojeny.
Oba jsou nejspíš řetězce, výsledkem bude řetězec, který je předán vnější funkci attr.

$('form') vrátí obalený formulář, .submit(function() {...}) zaregistuje posluchače události submit a vrátí ten obalený formulář, .submit() vytvoří událost submit.

Vidíš snad, že ten kód toho dělá mnohem víc než bys čekal. To je daň za používání jQuery. A to, že se funkce chovají úplně jinak podle typů nebo počtu argumentů je chyba návrhu, kterou ovšem, zdá se, většina přehlíží.
snazimse
Profil
MartinP:
Díky moc funguje.


juriad:
Také velmi velmi děkuji za vyčerpávající vysvětlení.Kež bych to uměl,tak jako vy.To by bylo,je to dost složité.Všechna čest vám.
To mi hodně pomůže,v pochopení.Máte pravdu,moc se mi to také nelíbí ten zápis,je takový zmatený.
Na druhou stranu v čistém JS,by to bylo na o x víc řádků to je zřejmé.Ale ,že se to takhle zapisuje,to jsem vážně mimo.
Ten this to je klasicky odkaz daného objektu,právě vybraný selektorem v nějaké funkci,rozumím tomu správně?

Hold prostě mi to moc nejde.
_es
Profil
snazimse:
Na druhou stranu v čistém JS,by to bylo na o x víc řádků to je zřejmé.
V „čistom JS“ by to mohlo byť naopak jednoduchšie:
<form onsubmit="this.action += document.getElementById('cat').value"...
Ak by bol element s id=cat prvkom formulára, tak by sa to dalo ešte jednoduchšie.
Chamurappi
Profil
Reaguji na snazimse:
Na druhou stranu v čistém JS,by to bylo na o x víc řádků to je zřejmé
Pokud je to jeden (nebo první) formulář na stránce:
document.forms[0].onsubmit = function(){
  this.action += document.getElementById("cat").value;
};
document.forms[0].submit();

já bych potřeboval to automaticky spouštět
Proč bys to potřeboval? Co to kutíš? Nejde to celé vymyslet lépe? Proč není #cat uvnitř formuláře?

Ten this to je klasicky odkaz daného objektu,právě vybraný selektorem v nějaké funkci
Je to element, na kterém došlo k události. Selektorem můžeš vybrat víc věcí zároveň, ale v this bude vždy jen jeden objekt.

Mimochodem, mohl bys prosím psát normálně za interpunkčními tečkami a čárkami mezery? Trhá mi to oči a jsem si jist, že nejsem sám, kdo kvůli tomu tvé příspěvky nečte zrovna ochotně…
_es
Profil
Chamurappi:
Nenastane v [#6] a [#2] dvojité odoslanie formulára?
Kubo2
Profil
_es:
Nie. Malo by?
_es
Profil
snazimse by mal asi aj napísať, či má stlačenie odosielacieho tlačítka robiť to isté, ako to „automatické spustenie.

Chamurappi:
Nemalo by byť pred posledným riadkom ešte document.forms[0].onsubmit();? - Metóda submit nevyvolá udalosť onsubmit.
snazimse
Profil
_es
Asi máte pravdu.

by mal asi aj napísať, či má stlačenie odosielacieho tlačítka robiť to isté, ako to „automatické spustenie.
Samozřejmě, že má akorát že to spustí jquery.

Chamurappi:
Budu se snažit psát s mezerami.

No potřebuji,je to složitější potřeboval jsem si na jeden klik s option value předávat,prostě value z jiného formuláře a uměle to vložit zase do value jiného formuláře a odeslat,který se neodesílá nikam ve skutečnosti jen na výchozí stránce funguje na js.

V this bude jen jeden objekt? Takže když vyberu celý layout,tak mi to dá jeden objekt? Který ,kdybych nastavil třeba display:none,tak to vezme jako jeden objekt a nastaví to pro všechny elementy?

No a potřeboval jsem si vytáhnout value,z toho formuláře,a předat to na jiné stránky pomocí jquery.Stačilo mi to bez ajaxu.

Díky
_es
Profil
snazimse:
uměle to tam vložit a odeslat,který se neodesílá nikam ve skutečnosti jen na výchozí stránce funguje na js.
Môžeš to sformulovať nejako „normálnejšie“? Tak sa ten formulár odosiela či neodosiela? Alebo, ak tam sú fomuláre dva a jeden z nich sa neodosiela, tak na čo tam je (ako formulár)?

V this bude jen jeden objekt?
V this bude objekt elementu, ktorý vyvolal udalosť, teda pre udalosť submit (či onsubmit) nastavenom na formulár to bude logicky objekt toho formulára. Ak nastavíš jednu funkciu pre udalosť viacerým elementom (čo sa dá aj niektorými metódami jQuery), tak v nej bude this tiež vždy objekt toho jedného elementu, čo vyvolal udalosť.
snazimse
Profil
_es:

On se odesílá ,ale bez realoadu jen JS na stránce a tak to musí zůstat a já musím hodnotu z právě napsané value tohoto formuláře přesunout do toho druhého s hodnotou prvního který se odesílá na jinou stránku.

(Ten druhý je normální).

Ale mám to vyřešeno,takže vám ještě jednou děkuji!

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:

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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