Autor | Zpráva | ||
---|---|---|---|
Čekan Profil |
#1 · Zasláno: 15. 1. 2009, 17:18:04
Obvykle se JS používá pro kontrolu znaků, které nechceme, aby uživatelé zadávali do formuláře.
Já bych ale potřeboval js, který by se choval tak nějak opačně. Chci, aby kontroloval znaky, jejichž existenci si přeji. Chci, aby uživatelé do formuláře psali jisté znaky, konkrétně znaky s háčky a čárkami. Chovat by se to mělo takto: Pokud nenajde alespoň jeden z předem definovaných znaků (ě,š,č,ř,ž,ý,á, atd.) nedovolí odeslat formulář a uživateli zobrazí hlášku. To vše ale jen v případě, že kontrolovaný řetězec je alespoň (řekněme) 50 znaků dlouhý. (Je-li tedy text kratší, kontrola se neprovádí.) V praxi si to můžete představit tak, že jde o kontrolu příspěvků v diskusním fóru jako je toto, a já jsem zlý admin, který nemá rád, když lidé píší bez háčků a čárek. Věděl byste někdo jak na to? |
||
Měsíček Profil |
#2 · Zasláno: 15. 1. 2009, 17:32:10
Reaguji na Čekana:
Třeba tímto způsobem: <script type="text/javascript"> var text = "Ahoj stařeno."; var char = ['á','é','ř']; // Doplň si sám function check_diacritical () { // Vrací 1 při úspěchu jinak vrátí 0 if (text.length > 10) { for (var i = 0; i < char.length; i++) { if (text.indexOf(char[i]) != '-1') return 1 } } return 0; } alert("Text ["+text+"] "+((check_diacritical() == 0) ? "ne" : "")+"obsahuje diakritická znaménka."); </script> |
||
Čekan Profil |
#3 · Zasláno: 15. 1. 2009, 17:44:01
To zírám, to je rychlost blesku. Mockrát díky!
Poradil bys mi ještě s vlastní implementací? Jak se to vyvolá (spustí)? Asi by se to mělo definovat jako funkce a tu pak spustit na "onsubmit" nebo ještě lépe na "onblur"? var text = "Ahoj stařeno."; Tohle je asi dobré pro ilustraci, já ale potřebuji kontrolovat formulář, resp. jen jednu jeho část (textarea). Předem díky! |
||
Měsíček Profil |
#4 · Zasláno: 15. 1. 2009, 18:00:43
No zkus si pořádně projít tady tohle:
<script type="text/javascript"> /** * Prototyp jež kontroluje délku řetězce a zároveň to jestli obsahuje * či neobsahuje diakritická znaménka. */ String.prototype.check_diacritical = function () { var _char = ['á','č','ď','é','ě','í','ň','ó','ř','š','ť','ú','ů','ý','ž']; if (this.length > 8) { for (var i = 0; i < _char.length; i++) { if (((this).toLowerCase()).indexOf(_char[i]) != '-1') return 1 } } else { /** * Tento řádek odkomentuj kdyby jsi chtěl povolit (dát hodnotu 1) i těm kteří nemají * příspěvek delší než 10 znaků. */ // return 1 } return 0; } /** alert("PunČoška.." .check_diacritical()); // Vrátí 1, protože text obsahuje diakritiku. alert("Punč." .check_diacritical()); // Vrátí 0, protože text má méně než 8 znaků. alert("Puncoska.." .check_diacritical()); // Vrátí 0, protože znak neobsahuje diakritiku. **/ function _check_diacritical(arg) { return ((arg).check_diacritical()) ? true : false; } </script> <form action="page.php" onsubmit="return _check_diacritical(document.getElementById('t').value);"> <textarea id="t"></textarea> <button type="submit"> Odeslat a zkontrolovat </button> </form> |
||
Čekan Profil |
#5 · Zasláno: 15. 1. 2009, 18:12:50
Díky, vyzkouším to.
|
||
Čekan Profil |
#6 · Zasláno: 15. 1. 2009, 18:24:48
Dal jsem tam toto:
<script type="text/javascript"> /** * Prototyp jež kontroluje délku řetězce a zároveň to jestli obsahuje * či neobsahuje diakritická znaménka. */ String.prototype.check_diacritical = function () { var _char = ['á','č','ď','é','ě','í','ň','ó','ř','š','ť','ú','ů','ý','ž']; if (this.length > 8) { for (var i = 0; i < _char.length; i++) { if (((this).toLowerCase()).indexOf(_char[i]) != '-1') return 1 } } else { /** * Tento řádek odkomentuj kdyby jsi chtěl povolit (dát hodnotu 1) i těm kteří nemají * příspěvek delší než 10 znaků. */ return 1 } return 0; } /** alert("PunČoška.." .check_diacritical()); // Vrátí 1, protože text obsahuje diakritiku. alert("Punč." .check_diacritical()); // Vrátí 0, protože text má méně než 8 znaků.**/ alert("Puncoska.." .check_diacritical()); // Vrátí 0, protože znak neobsahuje diakritiku. function _check_diacritical(arg) { return ((arg).check_diacritical()) ? true : false; } </script> a toto: <form action="{$main_url}/{$indexphp}" method="post" class="formStyle" id="postMsg" enctype="multipart/form-data" onsubmit="return _check_diacritical(document.getElementById('postText').value);"> Funguje to tak, že pokud napíši příspěvek bez diakritiky, odešle se a až pak se objeví js hláška ve které je jen toto "0". Potřebuji, aby se neodeslal a v hlášce bylo povídání. |
||
Měsíček Profil |
#7 · Zasláno: 15. 1. 2009, 18:26:38
Ustřihl jsi tam komentář. (**/) Jestli ti to ani poté nepůjde, zkusím to dát na web ať máš živou ukázku.
|
||
Čekan Profil |
#8 · Zasláno: 15. 1. 2009, 18:31:43
Ustřihl, protože předtím to nedělalo vůbec nic.
|
||
Měsíček Profil |
#9 · Zasláno: 15. 1. 2009, 18:32:13
|
||
Čekan Profil |
#10 · Zasláno: 15. 1. 2009, 18:32:14
Ustřihl, protože předtím to nedělalo vůbec nic.
|
||
Čekan Profil |
#11 · Zasláno: 15. 1. 2009, 18:42:01 · Upravil/a: Čekan
Testuji to tady http://www.chalupari.cz/male-pismeno-na-10-18-0.html a bohužel stále nic.
Nemůže se ten js nějak mlátit s jiným, který je přímo v tom kontrolovaném formulářovém prvku: <textarea name="postText" id="postText" rows="12" class="textForm" onblur="this.value = this.value.substr(0, 1).toUpperCase() + this.value.substr(1);">{$postText}</textarea> |
||
Měsíček Profil |
#12 · Zasláno: 15. 1. 2009, 18:53:50
V tom balastu se mi hrabat moc nechce ..
1.) Zkontroluj si jestli se ti nebijí někde jména proměnných (něco uděláš s jednou proměnnou, ale v jiném skriptu to zase přebiješ). 2.) Zkontroluj si co to bude dělat bez toho onblur. 3.) Dříve si takové věci testuj na speciální stránce (pouze můj skript) a až ho kompletně pochopíš zkus ho dát do fóra. 4.) Testuj jestli vůbec skript dojde tam kde má. (co vypíše alert(document.getElementById("post.... 5.) Uvolni oprávnění ať si to mohu vyzkoušet a zjistit kde je chyba .. s odepřeným přístupem pro odesílání příspěvků to asi jednoduché nebude. |
||
Čekan Profil |
#13 · Zasláno: 15. 1. 2009, 18:58:20 · Upravil/a: Čekan
Uvolni oprávnění ať si to mohu vyzkoušet a zjistit kde je chyba .. s odepřeným přístupem pro odesílání příspěvků to asi jednoduché nebude
Nechtěl by ses prostě zaregistrovat? |
||
Čekan Profil |
#14 · Zasláno: 15. 1. 2009, 19:03:09
„V tom balastu se mi hrabat moc nechce .. “
Za vyřešení nabízím 200Kč. |
||
Měsíček Profil |
#15 · Zasláno: 15. 1. 2009, 19:13:11
Jak teď koukám ..
<form action="http://www.chalupari.cz/index.php?" method="post" class="formStyle" id="postMsg" enctype="multipart/form-data" onsubmit"return _check_diacritical(document.getElementById('postText').value);"> |
||
Měsíček Profil |
#16 · Zasláno: 15. 1. 2009, 19:17:26
Čiliže .. zaregistroval jsem se a funguje to naprosto parádně.
1.) Jestliže jsem napsal méně jak 8 znaků (s i bez diakritiky) -> projde. 2.) Jestliže jsem napsal více jak 8 znaků bez diakritiky -> neprojde 3.) Jestliže jsem napsal více jak 8 znaků s diakritikou -> projde. |
||
Měsíček Profil |
#17 · Zasláno: 15. 1. 2009, 19:19:45
Dostanu čokoládu? :)
|
||
Čekan Profil |
#18 · Zasláno: 15. 1. 2009, 19:20:01
No a je to. Díky moc! Prostě jsem to dělal hekticky a nějak to přehlédl.
Živíš se programováním? Mám - budu - mít ještě pár spíše drobností, ale je mi blbé to chtít zadarmo. (Například: input pro hledání má obrázkové pozadí a jakmile do něj kliknu, zobrazí se jiné pozadí - zase obrázkové. Běžné a známé je, že něco po kliknutí trvale zmizí.) |
||
Měsíček Profil |
#19 · Zasláno: 15. 1. 2009, 19:22:14
Reaguji na Čekana:
"Živíš se programováním?" Ne. Neuživil bych se. "Mám - budu - mít ještě pár spíše drobností, ale je mi blbé to chtít zadarmo. (Například: input pro hledání má obrázkové pozadí a jakmile do něj kliknu, zobrazí se jiné pozadí - zase obrázkové. Běžné a známé je, že něco po kliknutí trvale zmizí.)" Na takové drobnosti bych měl stačit, takže rád pomůžu. |
||
Čekan Profil |
#20 · Zasláno: 15. 1. 2009, 19:45:01
OK. Tak já si tě tady najdu až to bude aktuální a ještě jednou díky.
|
||
_es Profil |
#21 · Zasláno: 16. 1. 2009, 06:22:41
Čekan
„V praxi si to můžete představit tak, že jde o kontrolu příspěvků v diskusním fóru jako je toto, a já jsem zlý admin, který nemá rád, když lidé píší bez háčků a čárek. “ Kto bude chcieť písať bez diakritiky, bude písať aj tak, len na konci napíše napríklad č. Môžu sa tým odmietnuť aj príspevky bez chýb v diakritike, keď bude chcieť návštevník napríklad citovať anglický text. |
||
Čekan Profil |
#22 · Zasláno: 16. 1. 2009, 09:47:13
Díky za postřehy.
„Kto bude chcieť písať bez diakritiky, bude písať aj tak, len na konci napíše napríklad č.“ Ano a tím o sobě něco prozradí. „Môžu sa tým odmietnuť aj príspevky bez chýb v diakritike, keď bude chcieť návštevník napríklad citovať anglický text.“ V pravidlech máme, že ho musí koemntovat. Navíc se to prtakticky něděje a toleranci jsem nastavil na 60 znaků ne jen na 8 jak je v tomto prototypu. |
||
Bubák Profil |
#23 · Zasláno: 16. 1. 2009, 10:28:58
Čekan
Kontroluješ to i na servru (PHP)? Jinak si vypnu JS selektivně pro tvou stránku a můžu si psat nehezky cesky. |
||
Tomasds Profil |
#24 · Zasláno: 16. 1. 2009, 10:38:13
Pokusil jsem se napsat text tak, abych se vyhnul diakritice. Mohl bych to napsat i trochu rozvlekleji, ale nechci. Toto nebudu moci z webu poslat?
|
||
Čekan Profil |
#25 · Zasláno: 16. 1. 2009, 10:41:07
Bubák
Dobrá připomínka. Nekontroluju. Zatím. Jedná se o "výchovné" opatření pro cca 2% návštěvníků resp. návštěvnic. Je to nasazené zde: www.omlazeni.cz . Jsou tam prakticky výhradně ženy netechnického zaměření. To, co napadne tebe (a mě), je obvykle (slávabohu) nenapadne, a když ano, tak pro mě spadnou do ještě užší skupiny (třeba 0,2%) a s klidným srdcem se s nimi rozloučím. Ale jestli máš php řešení, tak ho můžeš napsat (ale asi ne sem, že?), může se hodit. :-) |
||
Čekan Profil |
#26 · Zasláno: 16. 1. 2009, 10:43:29
„oto nebudu moci z webu poslat?“
Také jsem dělal všelijaké pokusy. Praxe ukáže, jestli tyto věty vznikají i jinak než soustředěným úsilím. :-) |
||
Tomasds Profil |
#27 · Zasláno: 16. 1. 2009, 10:51:02
Čekan
Já jsem břídil. Dozvědět se to Pixy, napíše ti slohovou práci o diakritice v diskusích na netu a nepoužije jediné nabodeníčko :-) |
||
Chamurappi Profil |
#28 · Zasláno: 16. 1. 2009, 10:57:05
Reaguji na Čekana:
Spolehlivější by bylo sledovat výskyt odháčkovaných slov, která se správně píší s diakritikou a jsou v češtině častá. Typicky třeba „kter[ýáé]“. Příspěvek, který neprojde testem, bys mohl místo zablokování automaticky prohnat ohákováním :-) |
||
Čekan Profil |
#29 · Zasláno: 16. 1. 2009, 10:57:27
Tomasds
Nic není dokonalé. Já jsem se těm diakritickým slovíčkům musel pokaždé velmi vědomě a velmi cíleně vyhnout, přirozeně mě to vedlo jinam, byl to takový slalom. Už to běží od půlnoci a stále OK. |
||
Čekan Profil |
#30 · Zasláno: 16. 1. 2009, 11:02:49 · Upravil/a: Čekan
Chamurappi
„bys mohl místo zablokování automaticky prohnat ohákováním :-)“ O té možnosti jsem věděl (někdy v minulosti jsem si toho všiml), ale nevím, nevím. Možná by to byla podpora těch vlastností, které u členek fóra (jež mám být do jisté míry výběrové), podporovat nechci. Ale nikdy neříkej nikdy. Každopádně díky za odkaz. |
||
Téma pokračuje na další straně.
|
0