Autor | Zpráva | ||
---|---|---|---|
Petr-K Profil * |
#1 · Zasláno: 17. 9. 2010, 19:56:35
Zdravím,
začínám s Javascrptem a AJAXem a potřeboval bych menší radu. Vytvářím registrační formulář a přihlašovací jméno porovnávám s databází pomocí AJAXu, zda už je již použité jiným uživatelem či nikoliv. Prakticky používám tento script. A narazil jsem na jednu drobnost. Sice to není pravidlem, ale občas se mi stane (cca 1x z 20ti pokusů), že když login napíši velice rychle, tak je poslední znak loginu porovnán rychleji než jeho některý předchádce. A pak, ač login je obsazený (v databázi již existuje), tak script mi vyhodí že je volný. Můžete mi tedy poradit jak tomuto nešvaru předejít a jak jak porovnávat znak po znaku a nebo třeba porovnat celý řetězec po opuštění inputu kurozrem? Doufám, že jsem to napsal srozumitelně... :) Moc děkuji, Petr |
||
mattyZEM Profil |
#2 · Zasláno: 17. 9. 2010, 20:09:44
Porovnával bych to až po opuštění inputu (nikoliv kurzorem).
|
||
Nox Profil |
#3 · Zasláno: 17. 9. 2010, 20:14:28
proč znak po znaku? po tom co člověk přestane psát, tak bych chvílu počkal a teprv pokud nebude dál psát, tak teprve celé pole zkontrolovat... podle mě je zbytečné kontrolovat po každém klepnutí
mimo to je ten PHP skript došt škaredej a s bezpečnostní dírou |
||
Petr-K Profil * |
#4 · Zasláno: 17. 9. 2010, 20:38:20
A můžete mi tedy poradit více konkrétně?
|
||
Nox Profil |
#5 · Zasláno: 17. 9. 2010, 20:48:23
mattyZEM => onkeyup -> onblur
Nox => onkeyup if(timeout) clearTimeout(timeout); setTimeout(function(){...}, ...) |
||
Petr-K Profil * |
#6 · Zasláno: 18. 9. 2010, 00:59:10
No, jak jsem říkal, s Javascrptem a AJAXem začínám.... chvíli jsem teď zkoušel a pročítel různé návody. S onBlur jsem si poradil ale s tím setTimeout bohuzel ne.
Když to zapíši podle Noxe tak mi to vypiše chybu: timeout is not defined <input type="text" name="email" value="" onkeyup="if(timeout) clearTimeout(timeout); timeout = setTimeout(ziskejjmeno(), 2000)" /> a když přidam var timeout, tak mi to zase napíše tuhle chybku: useless setTimeout call (missing quotes around argument?) input type="text" name="email" value="" onkeyup="var timeout; if(timeout) clearTimeout(timeout); timeout = setTimeout(ziskejjmeno(), 2000) />" :( |
||
Petr-K Profil * |
#7 · Zasláno: 18. 9. 2010, 01:00:59
Druhý příklad (s var) samozřejmě vypadá takto, bez chyb:
<input type="text" name="email" value="" onkeyup="var timeout; if(timeout) clearTimeout(timeout); timeout = setTimeout(ziskejjmeno(), 2000)" /> |
||
_es Profil |
#8 · Zasláno: 18. 9. 2010, 01:19:25
<input type="text" name="email" id="email" value=""> <script> var e = document.getElementById("email"), t; e.onkeyup = e.onclick = e.onchange = function(){ clearTimeout(t); t = setTimeout(ziskejjmeno, 2000); }; </script> |
||
Petr-K Profil * |
#9 · Zasláno: 18. 9. 2010, 13:07:00
_es
Děkuji Ti, funguje to přesně jak jsem si představoval, nejak se mi AJAKX začíná íbit. :) Mám nyní dvě laické otázy a nevím zda pro ně otevřít nové téma nebo ne, přijde mi to pro takovou drobnost zbytečné, takže snad to bude ok: 1) jaký je rozdíl mezi těmito zápisy a kdy se používají, postačí nějaký chytrý odkaz: document.getElementById("email") a self.document.forms.registrationForm.email.value 2) z PHP jsem zvyklý, že když volám funkci, tak za jejím názvem píši kulaté závorky, ale v tomto připadě závorky nejsou použity. Ale když je tam doplním tak to také funguje, ale zaroveň to hází chubu. Jak to tedy je? Děkuji |
||
Nox Profil |
#10 · Zasláno: 18. 9. 2010, 13:19:37
Petr-K:
[#6] psal jsem jen schématicky [#9] 1) podle mě ne... dle http://diskuse.jakpsatweb.cz/?action=vthread&forum=1&topic=115545&page=-1 by mělo stačit registrationForm.email.value... registrationForm si můžeš třeba předem uložit do proměnné a pracovat tak 2) tady je to proto, že se funkce nevolá... voláme setTimeout(co, za_jak_dlouho) ... agument 'co' může být buď řetězec, což je fuj, nebo funkce v JS je navíc funkce objekt, takže prostě napíšeme funkci a ona se předá, jako argument funkce se předá objekt-funkce pokud bys přidal závorky, volalo by se jako argument funkce ziskejjmeno(), takže se v momentě nastavení zjistí hodnota pole a vyjde třeba setTimeout("ano", 2000), což je nesmysl |
||
_es Profil |
#11 · Zasláno: 18. 9. 2010, 13:46:00
Petr-K:
„jaký je rozdíl mezi těmito zápisy“ Pri prvom zápise sa nájde element podľa atribútu id v celom dokumente.
V druhom zápise sa nájde element podľa atribútu name elementu form a atribútu name nejakého elementu v tom formulári, value je už vlastnosť toho elementu.
Teoreticky by mal byť úplne správne druhý zápis: document.forms.registrationForm.elements.email „Jak to tedy je?“ Stručne vysvetlené to je tu. |
||
Časová prodleva: 14 let
|
0