Autor Zpráva
hal_sk
Profil
Zdravím.
Potrebujem spraviť php skript, ktorý z textu v textarea spočíta znaky. Na stránke bude selectbox s option s hodnotou napr.: "a", a keď na to kliknem tak sa mi vypíše číslo že koľko krát sa znak "a" v texte vyskytuje.
Dík za odpovede.
Hooonza
Profil
Jde ti o počítání znaků v textaree? Není jednodušší javascript (nemusí se nikam posílat...)? Funkční příklad
<html>
<script>
function count(a)   {
 pole = ">"+document.f.jj.value+"<";
 pole = pole.split(a);
 pocet_pole = pole.length-1;
 alert(pocet_pole);
};
</script>

<form name=f>
<textarea name=jj>abcd cdcdc</textarea><br>
<select name=sel>
<option value=a>a </option>
<option value=b>b </option>
<option value=c>c </option>
</select>
<input type=button onclick="count(document.f.sel.value);" value="Počítej">
</form>
Hooonza
Profil
TOhle je lepší, ihned automaicky vypisuje počet:
<html>
<script>
function count(a)   {
 pole = ">"+document.f.jj.value+"<";
 pole = pole.split(a);
 pocet_pole = pole.length-1;
 document.f.pocet.value = pocet_pole;
};
</script>

<form name=f>
<textarea name=jj onKeyUp="count(document.f.sel.value);"></textarea><br>
Počet písmenek <select name=sel onchange="count(this.value)">
<option value=a>a </option>
<option value=b>b </option>
<option value=c>c </option>
<option value=d>d </option>
<option value=e>e </option>
<option value=f>f </option>
<option value=g>g </option>
</select>: 
<input type=text readonly name=pocet size=4>
</form>
hal_sk
Profil
TOhle je lepší...

Díky. Použil som to a funguje to dobre. Len by som tomu rád pochopil. Už 4 hodiny študujem ten skript, spolu so seriálmi o JS. Nemôžem to pochopiť. Napr. toto:

onKeyUp="count(document.f.sel.value)

To je funkcia "count" ktorá je definovaná medzi: <script></script>. Ale som jeleň s tých parametrov: document.f.sel.value.
A napríklad nazačiatku je u "count" parameter (a). Jaký má význam?

Dík za trpezlivosť.

PS: pôvodne som to chcel v php, ale v JS to nevyzerá zle. Prosím admina keby bol tak dobrý a presunul tento thread do sekcie JavaScript.
Hooonza
Profil
hal_sk
onkeyup - událost klávesy (http://www.jakpsatweb.cz/javascript/udalosti.html#klavesnice)
count - ano, je to ta funkce
document.f.sel.value - přístup javascriptu k hodnotě (value) pole "sel" (name=sel má formulářové pole select) ve formuláři (formulář má name=f) v dokumentu (viz http://www.jakpsatweb.cz/javascript/objekt-document.html).
Funkce (http://www.jakpsatweb.cz/javascript/funkce.html) může přijmout parametr ( funkce(parametr) ), když jí budu s tímto parametrem volat (onkeyup=count(parametr), kde parametrem je document.f.sel.value, tedy hodnota selectu).
Hodnota selectu (písmenka, které chci počítat) se předá funkci count. Ta zjistí obsah textové arey (document.f.jj.value), "orámuje ji" značkami "><" (indiferentní značka, která ná jinak nezajímá; je to potřebné pro další postup) a rozdělí pomocí písmenka, které chci spočítat. Rozdělením vznikne o 1 více částí, než kolik je písmenek, proto 1 musím odečíst a dostanu počet písmenek. Kdybych na začátku "neorámoval" hodnotu a textové arei značkami, pokud by počítané písmenko leželo na okrajích, po rozdělení by se to neprojevilo na počtu dílků původního obsahu textu a tak bychom přišli o jedno písmenko, které jsme chtěli počítat.
Pozor, funkce rozlišuje velikot písmen (A není a).
Dranel
Profil
Hooonza
Existuje v JS něco jako jsou v PHP pole a k tomu fce foreach? Abych nemusel vypisovat všechny optiony ale udělal to jako smyčku.
Hooonza
Profil
Větvení a cykly - http://www.jakpsatweb.cz/javascript/vetveni.html ...
Pole - http://www.jakpsatweb.cz/javascript/pole.html ...

No a pak je tu ještě strýček Goo - oogle...
Dranel
Profil
Hooonza
Vím, i teta Seznamka. Jenže já v JS nikdy nic nepsal. Nevím ani, jak se vypisuje do dokumentu :). Ale i tak dík, jdu si to najít.
peta
Profil
Dranel
"Jenže já v JS nikdy nic nepsal"
to neni omluva, to je spis vymluva. Bud to chces a poradis s napovedou nebo hledas nekoho, kdo to udela za tebe. Jenze to by musel byt nadsenec nebo mit spoustu levneho casu.
Chamurappi
Profil
Reaguji na Dranela:
Smyčka for-in (ekvivalent foreach v PHP) se na procházení polem moc nehodí.
hal_sk
Profil
Stále nad tým dúmam.

- môžete mi toto ešte raz vysvetliť?:
pole = ">"+document.f.jj.value+"<";


- v prvom kóde sa výsledok "pocet_pole" vypisoval cez "alert". Ale v druhom kóde sa vypisoval do tohto:
<input type=text readonly name=pocet size=4>

, ale ja tam nevidím žiadny "pocet_pole"
Hooonza
Profil
hal_sk
ad pole = ">"+document.f.jj.value+"<";
Uvažoval jsem takhle: funkce split funguje tak, že rozdělí řetěz pomocí zadaného výrazu. Když budu chtít řetěz "a-b-c-d-e-f-g" rozdělit touto funkcí pomocí "-", výsledkem bude pole "a", "b", "c", "d", "e", "f", "g". Tedy původní řetěz, který obsahoval 6x "-" funkce rozdělí na 7 dílů. Pokud by ale řetěz vypadal "a-b-c-d-e-f-", výsledkem bude pole "a", "b", "c", "d", "e", "f" - teda při vstupu 6x "-" bude výstupem 6 dílů.
Ale, jak se teď dívám, ve skutečnosti je výstup z té druhé možnosti "a", "b", "c", "d", "e", "f", "" (zase 7 dílů) - takže o nic nejde, ty ohraničovací znaky tam dávat není nutné, stačí napsat
pole = document.f.jj.value;

ad <input type=text readonly name=pocet size=4>
To nemusíte řešit, proměnné si můžete pojmenovávat podle sebe a podle libosti - hlavně se v nich potom musíte vyznat a nazamotat je, výstup potom také řešít podle svého :-) Definitivní výsledek je vždy uložen po výpočtu v hodnotě pocet_pole = pole.length-1;. Číslo, které nás zajímá, je uloženo v proměnné pocet_pole a teď záleží na nás, jak s ním chceme dále naložit:
1. Alert znamená, že vyskočí oznamovací okénko (=> pokud ho chcete ukazovat).
2. V druhém případě javascript přistoupí k hodnotě okénka document.f.pocet.value - to je to okénko s výsledkem ve formuláři (má jméno name=pocet) - a nastaví ji podle našeho výsledku, takže výsledek vidíme tam. Parametr readonly je parametrem pro HTML, způsobí, že do okénka nelze nic napsat přímo z klávesnice a okénko si lze jen přečíst.
Způsobů, jak a kde si výsledek zobrazit, je hromada, vlastně záleží na nás, co s ním zamýšlíme a jak jej použijeme.
hal_sk
Profil
Tak už som to konečne pochopil. Díky za trpezlivosť.

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: