Autor Zpráva
Darker
Profil
Chtěl jsem si udělat malou funkci která na základě rekulárního výrazu a eventu vrátí true nebo false a povolí tak pouze některé znaky. Problém je v tom, že znaky, které získám převedením event.which na String neodpovídají znakům, které se objevují v políčku.
Jak mám tedy získat znak(y) které uživatel do pole vepsal?
function validate(event, regexp) {
    var charCode = event.which != null? event.which : event.keyCode;
    if(!event.shiftKey)
      charCode+=32;
    text = String.fromCharCode(charCode);
    alert(text);
        return regexp.test(text);
}
Napadlo mě zjistit při keydown pozici kurzoru a uložit si value, při keyup pak starou a novou value porovnat a smazat nevhodné znaky. Ale to by asi vypadalo dost divně.
Chamurappi
Profil
Reaguji na Darkera:
On je rozdíl mezi kódem klávesy a kódem znaku. Viz:
ASCII kurzorových šipek
Odchytávání znaků
_es
Profil
Darker:
povolí tak pouze některé znaky
To by mal predsa robiť až server. A čo ak sa obsah vloží pomocou myši, či klávesovou skratkou? Alebo, prečo neoveruješ obsah až pred odoslaním dát?
Darker
Profil
_es:
To by mal predsa robiť až server. A čo ak sa obsah vloží pomocou myši, či klávesovou skratkou? Alebo, prečo neoveruješ obsah až pred odoslaním dát?
Jde o to, že normálnímu člověku dojde, že tam ten znak nepatří, pokud tam nejde vepsat. Nikde jsem nenapsal že na serveru nemám kontrolu odeslaných dat. Prostě mám rád když formulář nemusím odesílat desetkrát kvůli tomu, že kontrola je AŽ na serveru.
Pro tvoje uklidnění mohu říct že CTRL+V nefunguje.
Další ověřování je při ONBLUR.

Chamurappi:
On je rozdíl mezi kódem klávesy a kódem znaku. Viz:
To jsem se dočetl, nicméně o tom, že mám použít charCode jsem se nic nedověděl. Děkuji za odkazy, už to funguje jak má.
_es
Profil
Darker:
Pro tvoje uklidnění mohu říct že CTRL+V nefunguje.
To sa návštevník určite takýmto naschválom veľmi poteší.

Další ověřování je při ONBLUR.
Bohato stačí len onsubmit.
Amunak
Profil
Darker:
Já zase nemám rád, když nemůžu použít kopírování. A vadí mi to daleko víc než desetinásobné odesílání formuláře (pokud mi to mezitím nezmizí). A existují i jiné způsoby vkládání textu, různá makra apod.

Samovolné mizení znaků může být dost matoucí...
Darker
Profil
Budete si opravdu odněkud kopírovat uživatelské jméno? Samovolné mizení znaků se nekoná a nekonalo.

Amunak:
A existují i jiné způsoby vkládání textu, různá makra apod.
Kolikrát budu říkat že kontrola na serveru je zavedena?
_es
Profil
Darker:
Budete si opravdu odněkud kopírovat uživatelské jméno?
Nie je to u návštevníkov úplne vylúčené - ak je napríklad rovnaké meno na viacero rôznych registrácií. Cieľom je predsa povolenie len určitého formátu mena, zákaz ctrl+V nedáva zmysel. Ak ide o meno, teda krátky text, tak ti stačí len overovať celý textový reťazec a reagovať na to, ak sa vyskytne nepovolený typ mena - tak môžeš obsiahnuť všetky možnosti editácie.
Darker
Profil
To jsou kecy, uživatelské jméno jsem nikdy do žádného pole nekopíroval. Pokud by ke vložení došlo, formulář se stejně neodešle. Jak už jsem řekl, pole se kontroluje při změně. Přestaňte si vymýšlet blbosti, dotaz byl vyřešen a vše níže od odpovědi patří do koše.
Str4wberry
Profil
Řekl bych, že je pro uživatele lepší, když se o napsání zakázaného znaku dozví ihned po jeho napsání. Ta myšlenka, že se zadaný znak nevloží a uživateli se zobrazí upozornění, mi proto přijde moc dobrá. Myšlenku, že stačí jen onsubmit nesdílím, to už se rovnou může pomalu všechno kontrolovat jen na straně serveru, když se po odeslání budu muset vracet k jednotlivým nevhodně vyplněným políčkům formuláře.

Co se týče blokování jiných postupů zadávání než stisknutí klávesy, tak to je samozřejmě hloupost. Text můžu vložit i jinými způsoby než zkratkou Ctrl + V. Také se může formulářové pole vyplnit, a to bude asi častější než vkládání ze schránky, pomocí automatického vyplňování. Ale nějak nevidím důvod tyto způsoby blokovat, když na ně bude fungovat ten onblur, případně onsubmit.
Darker
Profil
Baví mě jak jste se tu vrhli na blokování vkládání které jsem tam dal jen proto, abych zkusil jestli to bude funguvat. Než budete pokračovat v mudrování, podívejte se na to, jak a kde jsem to aplikoval. Jde o kontrolu validity uživ. jména které si uživatel může nastavit po přihlášení. (přihlašovací formuláž je zatím jen na PHP) - Odkaz. (jméno pokus@gmail.com, heslo žádné, pokud někdo z vás jméno nastaví, další už formulář neuvidí, takže pokud chcete zkusit serverovou kontrolu, založte si vlastní účet)
Připomínky mimo téma si nechte od cesty až do doby, než aplikaci prohlásím za hotovou.
_es
Profil
Str4wberry:
Řekl bych, že je pro uživatele lepší, když se o napsání zakázaného znaku dozví ihned po jeho napsání.
Myslím, že išlo o spôsob, že návštevník stlačí klávesu a nenastane nič. Z toho návštevník nemusí pochopiť, že napísal zakázaný znak, trebárs si to ani nemusí všimnúť, alebo sa môže zľaknúť, že mu „blbne“ klávesnica.

Ide skôr o to, že Darker zvolil už v základe zlý postup „blokavania kláves“. Podľa mňa je lepšie najprv spraviť funkciu na overenie mena a až potom ju priradiť rôznym udalostiam - môže tak reagovať na rôzne udalosti pri editácii - nielen na stláčanie kláves. A potom nie je dôvod nejaký spôsob editácie zakazovať.
Darker
Profil
_es:
Pokud máš pocit, že ti blbne klávesnice, zkus si to v adresním řádku. K políčku jsem dopsal jaké jsou povolené znaky, pokud se snažíš vepsat jiné, nemám důvod ti to povolovat.
Pokud se ti povede neplatný řetězec nějak vložit a odeslat, určitě to nebude omylem, takže není co řešit.


Stejnou kontrolu jsem aplikoval na email. Dovedu se představit jak matoucí by bylo, kdyby se mi hlásil neplatný e-mail aniž by mě skript nechal dopsat.
Toto téma je uzamčeno. Odpověď nelze zaslat.