- január 2012 (1)
- július 2011 (1)
- május 2011 (1)
- február 2011 (1)
- január 2011 (3)
- december 2010 (2)
- november 2010 (2)
- október 2010 (3)
- szeptember 2010 (2)
- július 2009 (1)
- 1 / 2
- ››
Régebben írtam egy cikket a dinamikus form ellenőrzésről, és arra gondoltam leírom az eljárás modernebb változatát, azaz a hibaüzenetek nem alert ablakban jelennek meg, hanem DHTML segítségével.
Természetesen olyan kódot kell készíteni amely akárhány form-ra dinamikusan működik, tehát nem függ az input mezők számától, és az oldalon elhelyezett form-ok mennyiségétől.
A megoldást itt is a jQuery JavaScript könyvtár adja.
De mindenek előtt érdemes átnézni hogyan is kell felépíteni egy profi form-ot. Khauth György kollegám írt már erről néhány nagyon hasznos cikket:
Miután az alapelvek tanulmányozásával végeztünk készítsük el a form-ot:
<style type="text/css"> .form-row { padding-bottom: 10px; width: 290px; } .form-row label { float: left; width: 100px; padding-right: 10px; } .form-row input { float: left; padding: 3px; width: 160px; } .clear { clear: both; } .form-error { text-align: center; color: #C52020; border: 1px solid #DD7777; background: #FFCCCC; margin: 10px 0; display: none; } </style> <div style="margin: 0 auto; width: 300px;"> <form action="#" method="post"> <div class="form-row"> <label for="keresztnev">Keresztnév:</label><input type="text" name="keresztnev" class="kotelezo" id="keresztnev" /> <div class="clear"></div> <div class="form-error hianyos">A keresztnév megadása kötelező!</div> </div> <div class="form-row"> <label for="vezeteknev">Vezetéknév:</label><input type="text" name="vezeteknev" class="kotelezo" id="vezeteknev" /> <div class="clear"></div> <div class="form-error hianyos">A vezetéknév megadása kötelező!</div> </div> <div class="form-row"> <label for="email">Email:</label><input type="text" name="email" class="kotelezo email" id="email" /> <div class="clear"></div> <div class="form-error hianyos">Az email cím megadása kötelező!</div> <div class="form-error hibas">Nem valós az email cím!</div> </div> <div class="form-row" style="text-align: center;"> <input type="submit" name="submit" value="Mehet" style="float: none;" /> </div> </form> </div>
Ha megnézzük a kód a css stílus felépítésével kezdődik, ez gyakorlatilag csak az átlátható kinézetet kezeli. A lényeg természetesen a form, és a form-on belüli osztályok elhelyezkedése!
A form-ot körülöleli egy div, a JavaScript kóddal ezen belül fogunk keresni. Ennek az a lényege, hogy akárhány form-on el tudjuk sütni az eljárást, ne kelljen minden form-nál újra és újra megírni, hozzáigazítani a form-hoz.
Három adatok kérünk be: keresztnév, vezetéknév, és email cím.
Ha megfigyeljük mindegyik alatt megtalálható a hozzá tartozó hibaüzenet is. A hibaüzenetek mindegyike a form-error osztályba van sorolva, így a kinézetük egységesen definiálható, és láthatóságuk egységesen kezelhető.
A hibaüzenetek nem csak a form-error osztályba tartoznak, hanem a hiba típusába is. Ezesetben mind a három input mezőhöz tartozik egy hianyos osztály, ami akkor jelenik meg ha üresen hagytuk, az email címhez pedig egy hibas osztály, ami akkor jelenik meg ha az email cím nem valós.
Nézzük meg a hozzá tartozó JavaScript kódot, melyben dinamikusan elleőrizzük az input mezők kitöltöttségét, és az email cím helyességét, valósságát is:
<script type="text/javascript"> $(function() { $('form').submit(function() { var mehet = true; var first_error = true; var error_obj = null; $('div.form-error', $(this).parent()).each(function() { $(this).hide(); }); $('input.kotelezo', $(this).parent()).each(function() { if ($(this).val() == '') { mehet = false; if (first_error) { first_error = false; error_obj = $(this); } $('div.hianyos', $(this).parent()).show(); } }); var email = $('input.email', $(this).parent()).val(); var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/; if (!filter.test(email)) { mehet = false; if (first_error) { first_error = false; error_obj = $(this); } $('div.hibas', $(this).parent()).show(); } if (mehet) { return true; } else { location = '#' + error_obj.attr('id'); return false; } }); }); </script>
A dinamikus form ellenőrzésről írt cikkemhez képes van néhány eltérés, most ezekre térnék ki elsősorban.
Az első, hogy nem csak a mehet változót deklaráljuk, hanem a first_error bool típusút, és az error_obj html objektum típusút is. Ezek azt a célt szolgálják, hogy hibás kitöltés esetén le tudjuk tárolni melyik hiba volt az első a sorban, és automtaikusan oda ugorjunk az oldalon.
Utána láthatjuk a
$('div.form-error', $(this).parent()).each(function() { $(this).hide(); });
Ezután ellenőrizzük a kitöltöttséget, tehát végigmegyünk a kötelező input mezőkön. Ha valameny nincs kitöltve akkor a szülö objektumának hianyos osztályát megjelenítjük. Végül ellenőrizzük az email cím helyességét, tehát hogy illeszkedik-e a szabványra, és ha nem a szülő html objektumának hibas osztályát megjelenítjük.
Végül ha nem találtunk hibát tobábbengedjük a submit eseményt, ha találtunk akkor az első hibás mezőhöz ugrunk.
Üdv! Az lenne a kérdésem, hogy te hol és/vagy miből (könyv, pdf) tanultad meg a php-t meg a JS-t, ja meg cms-t használni?:)
A választ előre is köszi!
Üdvözlet!
Szia!
jQuery - Learning JQuery
Drupal 5 - Pro Drupal Development
Drupal 6 - Learning Drupal 6 Module Development
PHP - SitePoint The PHP Anthology Volume I-II
De amúgy a leghatékonyabb, hogyha van egy adott kód amit átalakítasz a saját ötleted alapján. Abból nagyon sokat lehet tanulni. Nézegetni az API-kat és kihozni belőle egy új dolgot.
De ezek a könyvek (PDF-ek) kiindulópontnak nagyon jók.
Magyar nyelvű irodalom a témákban nem sok van, csak PHP. Kezdésnek: A PHP, a MySQL és az Apache használata utána pedig jöhet a PHP fejlesztés felsőfokon.
De mondom, szeirntem alakíts át kódokat abból lehet sokat tanulni.
szia!
nagyon tetszik ez a megoldás a validálásra, de egyszerűen nem sikerült rájönnöm, hogyan kellene módosítanom a kódot, hogy egy olyan oldalban is működjön, melyet egy iframe-be töltök be. Azaz ha csak magában egy html oldalba beillesztem a példát s azt megnyitom a böngészőben, kiválóan működik az ellenőrzés, s a jquery elkapja a submitot, s nem is engedi tovább, amíg minden nem okés, DE ha ezt a html oldalt betöltöm egy iframebe egy másik oldalon, akkro már nem működik.
Arra gyanítok, hoyg a selectorral lesz gond a $('form')-al, de nem sikerült megoldanom :(( megkérhetlek, hogy segíts a megoldásban?
Köszönöm:
Tanka Péter
Köszönöm a segítségedet, gyakorlatilag a levélváltásainkkal sikerült megoldanom a problémát, sőt, még jókat is tanultam a keresőoptimalizálásról :)
Bár lenne kicsit több időm, jelentkeznék hozzátok dolgozni, többet tanulnék ott, mint az egyetemen, amit most végzek :))
Nagyon szívesen!
Örülök, hogy sikerült megoldani a problémádat, ha legközelebb elakadsz valahol, nyugodtan keress meg!
Nagyon örültm, hogy ráakadtam erre a scriptre, viszont rögtön lenne is kérdésem hozzá:
nem értek jQuery-hez, hogyan kell azt megoldani, hogy elemet is figyeljen, ne csak -ot? Selectnél a selected attribútumot kellene figyelnie.. (aminek olyami az értéke, hogy "Válassz a listából!")
Köszi!
A select-nél lehet használni a :selected figyelőt, és annak veszed az értékét.
Rájöttem.. textarea-t könnyen be lehet venni a dologba:
$('input.kotelezo, textarea.kotelezo', $(this).parent()).each(function() {
...
select-et már nem ilyen egyszerű, de megoldottam :-)
Igen így is meglehet, vagy kihagyod az input.kotelezo -t és csak simán végigmész az összes kotelezo osztalyba tartozo elemen:
$(’.kotelezo’, $(this).parent()).each(function() {
Szia!
Valamiért nekem nem akar működni, már megprobáltam az egyszerűbbet csak egy sima html-be behelyezni, de akkor sem megy. Van valami ötleted?
Szia!
Küld el nekem emailben a forrást, és megnézem, mert így sajnos nem tudom mi lehet a gondja.
Ide küldheted és pár napon belül visszaküldöm:
hosszu.kalman[kukac]gmail.com
Szia!
Bocsi a késői reagálásért. Már tárgytalan, mert megoldottam. :)
Azért köszi a segítő készségedet!
Oké értem és nagyon szívesen!
Azért ha van időd meg kedved akkor leírhatod ide mi volt a gond, hátha másnak is segítene.
Köszönöm!
Egy figyelmetlenségből adódó hiba volt, a jquery.js filet rossz elérési úttal adtam meg és ezért nem működött. :)
Viszont lenne egy kérdésem, miként lehet ezzel megoldani egy képi kódos vizsgálatot?
A képi kódos vizsgálat alatt gonodlom azt érted, hogy a spam-ek ellen van egy kép amiről be kell másolni a karaktereket.
Ennek captcha a neve, és itt:
http://jquery.bassistance.de/validate/demo/captcha/index.php
meg itt:
http://rksdesign.com/jquery-validate/index.php
találsz róla leírása, a valide plugin használatával összekötve.
Ha valami nem világos, vagy nem stimmel, akkor szólj és megnézem, esetleg készítek róla egy leírást!
Esetleg eltudnád készíteni azt a leírást, mert nem igazán tudtam beépíteni a fenti scriptedbe?
Előre is köszönöm!
Oké persze!
Megpróbálok vele foglakozni a hétvégén, de nem igérem hogy kész lesz!
Viszont az lesz akkor a következő bejegyzésem!
Szia!
Sikerült foglalkoznod a captcha-val?
Szia!
Most jutottam el odáig, hogy foglalkozzak vele, ne haragudj. A gondom az, hogy nem tudom pontosan mit is szeretnél.
Azt is hogyan elkészíteni egy captcha kódot, vagy drupal-ba kéne beéípteni a rendszert, vagy mi.
Ha ezekre válaszolsz, akkor megnézem a dolgot.
Tehát:
- Valamilyen cms rendszerbe szeretnéd beépíteni, vagy csak síma php+html?
- Van működő captcha kódod vagy az is érdekel hogy kell megcsinálni?
- Vagy végső soron csak arra vagy kiváncsi hogy működik a jquery-ben az AJAX. Mert ugye ha AJAX-al hívjuk meg a az ellenörző kódot, azzal tudjuk beépíteni a validálásba.
Köszönöm a válaszokat!