« 1 2 »
Autor Zpráva
Čekan
Profil
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
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
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
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>
Pokud napíšeš zprávu kratší 8 znaků tak to neprojde .. tuto ochranu zrušíš tím, že odkomentuješ jeden řádek (to jsem ti, ale napsal ve skriptu).
Čekan
Profil
Díky, vyzkouším to.
Čekan
Profil
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
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
Ustřihl, protože předtím to nedělalo vůbec nic.
Měsíček
Profil
http://bug-test.xf.cz/cekan.html
Čekan
Profil
Ustřihl, protože předtím to nedělalo vůbec nic.
Čekan
Profil
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
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
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
V tom balastu se mi hrabat moc nechce ..
Za vyřešení nabízím 200Kč.
Měsíček
Profil
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);">
chybí ti tam rovnítko .. doufám ovšem, že to byl chvilkový defekt při opravě.
Měsíček
Profil
Č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
Dostanu čokoládu? :)
Čekan
Profil
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
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
OK. Tak já si tě tady najdu až to bude aktuální a ještě jednou díky.
_es
Profil
Č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
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
Č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
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
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
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
Č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
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
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
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.
« 1 2 »

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: