Autor Zpráva
Tomasekkk
Profil *
Zdravím Vás jeśtě jednou, mám otázečku týkající se jquery effectu. S jquery teprve začínám, ale řeším jeden problém. Mám níže uvedený script, pokud měním počet kusů ve formuláři input občas se mi stane, že se stránka sice refreshne, ale neaktualizuje se mi stránka. Teď abych to vysvětlil, pokud mám ve scriptu uvedeno

$(this).effect("highlight", { color: "#3ef20e" }, 1000); 


tak po odeslání nejspíš nestihne rychle zapsat určité údaje do pridat.php (session apod.) a stránka se refreshne se starou hodnotou, pokud ale dám F5 na stránce zobrazí se nová hodnota. Tento problém dělá jen když mám využit tento effect, nedělá to pořád, ale občas, když odesílám formulářové políčko, tak např. při 10 odesláních a menší prodlevě se mi takto refreshne, ale nezaktualizuje. Dokážete mi prosím poradit? Effect highlight se mi líbí v tom, že to uživatele upozorní, že se něco stalo a políčko bylo aktualizováno.

 $("form").submit(function(e) {   

       var id = $(this).find('input[name=id]').val();   
       var qty = $(this).find('input[name=kusuzbozi]').val();   

           $.post(link + "pridat.php", { idvyrobku: id, pocetkusu: qty, ajax: '1' },   
                function(data){         
                  location.reload();
             });
        $(this).effect("highlight", { color: "#3ef20e" }, 1000);        
           return false; // Zastavit nacitani 
    });   
Witiko
Profil
Titulek tématu je zmatečný. Navíc v přiřazeném scriptu eventu onsubmit nikde nevidím volání funkce preventDefault, která by zabránila odeslání formuláře. To znamená, že formulář se snaží sám sebe odeslat na adresu uvedenou v atributu action a ve stejnou chvíli se script snaží pomocí jQuery odeslat data php scriptu. Případné neodeslání dat ajaxem bych tedy nepřipisoval efektu, ale jednoduše faktu, že dojde k načtení nové stránky, na kterou formulář po odeslání přejde, rychleji, než k odeslání data pomocí ajaxu. Doporučuji nevyužívat formulář a funkci připojit na button jako onclick event nebo využít preventDefault metody.
Tomasekkk
Profil *
Jelikož jsem začátečník jak jsem uváděl, tak jsem z toho prostě jelen :-) preventDefault si nastuduju
ah01
Profil
Tomasekkk:
Chyby ke kterým dojde jen občas se dost blbě hledají. Nejlepší by byl odkaz na živou ukázku. Ten kousek kódu vypadá totiž v pořádku.

Witiko:
Obsluha události mu vrací false, což je to samé, jako kdyby volal preventDefault a stopPropagation.
Chamurappi
Profil
Reaguji na Witika:
Navíc v přiřazeném scriptu eventu onsubmit nikde nevidím volání funkce preventDefault
Na 11. řádku vidíš return false i s komentářem, ne? To už je podruhé, co mu někdo zbytečně píše o preventDefault, čím to?


Reaguji na Tomaskkka:
Co je pointou toho skriptu? Poslat data z formuláře přes AJAX a pak znovunačíst stránku? Proč nenecháš odeslání formuláře normálně na prohlížeči?
Tomasekkk
Profil *
Co se týká toho return false, někdo psal i v jiném tématu, že bych preventDefault nemusel používat, pokud mám return false; což tady píše i ah01.

Co se týká toho scriptu, funguje to tak, že přes mysql selectuju data z databáze (výrobky) a mám na každém řádku políčko pro zadání počtu kusů a za ním je jen tlačítko přidat. Ajax volá script na kterém se zapíše do session id zboží a počet kusů. Obnovuju to právě proto, že na stránce s výrobky mám ono políčko pro zadání počtu kusů. Nemám to přes normální FORM POST, využívám script, který mám přímo v objednávce, takže jsem udělal v pokladně jen tu možnost, že si může případně zákazník taktéž upravit počet zboží, kdyby si těsně před objednáním všiml, že tam chce udělat nějakou změnu.

Ten refresh mám teď jen proto, že chci ať se reloadne na stránce přepočítaná cena podle kusů, případně se zobrazí řádek poštovné když je cena objednávky nižší než 2500Kč apod. říkal jsem si, že je zbytečné dělat další funkce apod. jen proto že bych udělal odesílání formuláře přímo přes FORM POST bez využití ajaxu. Snad jsem to tak trošku vysvětlil k pochopení :-)
Chamurappi
Profil
Reaguji na Tomasekkka:
Snad jsem to tak trošku vysvětlil k pochopení :-)
Ani moc ne. Pořád mi nedává smysl, že chceš použít naskriptovanou náhražku odeslání formuláře, aniž by se znovunačetla stránka, a pak znovunačíst stránku.
joe
Profil
Chamurappi:
co mu někdo zbytečně píše o preventDefault, čím to?
Měl jsem za to, že v nějakých prohlížečích s tím byl problém. Jednou jsem někde viděl, že to řešili právě tímhle.

Takže stačí všude dát jen return false? Jak u odkazů, tak i u formulářů?
Kcko
Profil
joe:
http://css-tricks.com/return-false-and-prevent-default/
http://stackoverflow.com/questions/1357118/javascript-event-preventdefault-vs-return-false
Chamurappi
Profil
Reaguji na joa:
O tom, co se s navrácenou hodnotou stane, rozhoduje v tomto případě jQuery. Mohla v něm někdy být nějaká chyba, nevím… tak podrobně ho nesleduji.
Ale jinak bez jQuery ano — obecně u většiny stornovatelných událostí platí, že return false zastaví jejich přirozený důsledek. Existuje pár výjimek, třeba onbeforeunload předpokládá, že návratová hodnota bude řetězec, který se ukáže uživateli.
_es
Profil
Chamurappi:
Existuje pár výjimek, třeba onbeforeunload předpokládá, že návratová hodnota bude řetězec, který se ukáže uživateli.
Ešte je výnimka pri objekte odkazu a udalosti onmouseover, kedy na zabránenie východzej akcie - zobrazeniu adresy v stavovom riadku, musí funkcia vrátiť true. V niektorých prehliadačoch to však môže byť zakázané.
Witiko
Profil
Chamurappi:
Omlouvám se, daný řádek zcela unikl mé pozornosti. :) Ve skutečnosti mě udivilo, proč je vůbec využíváno formuláře jako takového, když vůbec není využit.

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: