Hirdetés
- Yettel topik
- Milyen okostelefont vegyek?
- Megérkeztek a Xiaomi 15T sorozatának telefonjai Magyarországra
- iPhone topik
- Xiaomi 13T és 13T Pro - nincs tétlenkedés
- A Gemini húzza ki a Sirit a csávából
- Google Pixel topik
- MIUI / HyperOS topik
- Még nincs is Vivo X300 Ultra, de már a nemzetközi kameratrónra pályázik
- Xiaomi 15T Pro - a téma nincs lezárva
Új hozzászólás Aktív témák
-
Sk8erPeter
nagyúr
válasz
TonTomika
#835
üzenetére
Karma és martonx tök jól leírták a lényeget - többek közt amit én is nagyon hangsúlyoznék: ne gányolj, és soha többé ne használj ilyen semmitmondó fos változóneveket, mert normális fejlesztőnek az ilyentől széjjelnyílik az agya, aztán szíve szerint utolsó leheletéig ütné azt, aki ilyet csinált.

Még valami:
van ez a kódrészleted:
$("body div#nav ul ul#szolgaltatasok")
Mivel itt egyedi azonosítók tartoznak ezekhez a DOM-elemekhez, tökéletesen felesleges ilyen rohadt hosszú selectort írni. Elég ennyi:
$("ul#szolgaltatasok")
vagy akár az ul-t is lehagyhatod, bár ez még nem árthat, mert legalább egyértelművé teszi, hogy itt egy listáról van szó.
Ezenkívül egy kissé általánosabban kéne megírnod a kódjaidat, nem "bedrótozni" az egyes menüelemekhez tartozó viselkedést. De asszem hasonlót már leírt Karma is. A lényeg, hogy tényleg legyenek class-aid, és azok megléte vagy nem léte szerint viselkedjenek az elemek."A feladat, hogy mindegyik aktuális menüpont ahol éppen jár az ember highlightolva legyen."
Ezt gyorsan felejtsd el, hogy ilyen window.location.pathname-hez hasonló hülyeségekkel szívatod magadat, feltételezem, itt egy NEM AJAX-szal legenerálódó menüről van szó - az aktív menüpontot jelző class-t normális esetben szerveroldali nyelvvel (pl. PHP-vel) szokták belegenerálni az adott menüpontba.
Tehát ha mondjuk van egy <ul> listád, akkor pl. a "rolunk" oldalon van egy "active" (vagy épp "highlighted" class, mint ez:
<ul>
<li><a href="/XYZ">XYZ</a></li>
<li class="highlighted"><a href="/rolunk">Rólunk</a></li>
....
</ul>Remélem érthető így.
Ami még fontos, és amire martonx is célzott: a lenyíló menük problémáját már előtted megoldották mások, úgy, hogy agyontesztelték mindenféle böngészőben, úgyhogy tényleg ne most találd fel a spanyolviaszt.
Ajánlott plugin lenyíló menüs macerára: Superfish.
jQuery-alapú, egyszerű, faszányos. -
Karma
félisten
válasz
TonTomika
#835
üzenetére
Végre egy kis élet a topikban.
Hát, az első gondolatom az volt a sorok olvasása közben, hogy téged is elkapott a Not Invented Here (NIH) szindróma - azaz inkább megírod puszta kézzel azt, amire a CMS-eket már mióta feltalálták. Egy kicsit remélem, hogy ez valami ujjgyakorlat, és nem egy valódi vevőnek szánt valódi oldal.
Ömleszteném inkább a további gondolataimat, sok mindenre benne lesz a válasz:
1) Változónevek! $-ral hagyományosan a jQuery által bewrappelt objektumokat szokás jelölni, a sima stringekhez nem annyira pálya. Másrészt nem kell spórolni a betűkkel, az "$a", "$c" és egyéb szutykolás helyett rendes, beszédes neveket használj, és akkor talán olvasható marad a kód két nap múlva is. Nekünk meg azonnal.
BASIC programozó voltál ezelőtt?
2) Ez a rész:
if($c == $a) {
$("body div#nav ul li#1 a").css('color', '#494949');
}Nem csak a c és a olvashatatlan változók miatt rossz. Nem illik (más szóval elítélendő baromság) a JS kódba beleraknod a konkrét CSS stíluselemeket, használj egy új classt hozzá; a színt meg a külső CSS fájlodban definiáld ehhez a classhoz.
Eztán használd az addClass(), removeClass(), toggleClass() jQuery függvények megfelelőjét a kiemeléshez.
3) Nem nehéz elérni, hogy az azonos szinten lévő többi elem becsukódjon, csak használnod kéne a HTML-ben a classokat a különböző szintek csoportosításához.
Pl.:
$(".main-menu-item.submenu").click(function() {
var $item = $(this);
$item.slideDown(0.1).siblings(".submenu").slideUp(0.1);
});Nem teszteltem, csak ideírtam fejből.
4) Dinamikus változók... Minden dinamikus a JavaScriptben bizonyos szempontból. A DOM fa bármikor változhat, ezért lehet a jQuery segítségével megadott feltételek alapján keresni. Például az aktuális menüelemnek adsz egy "highlighted" nevű classt (lásd 2. pont), akkor a $(".highlighted") selector visszaadja ezt az elemet, bármikor.
Ugye hogy értelmetlen közvetlenül a színeket állítgatni?
5) Egyébként mondogatod ezt a dinamikus jelzőt, de használható infó nem jött át.
Mikor is történik ez a DB elérés? Az oldal generálásakor a PHP (vagy más backend) végzi el, így a lejövő oldal igazából statikus; vagy AJAX hívásokkal töltöd le a menüelemeket az oldal betöltődése után? (Utóbbi esetben: miért?)
Egyáltalán ha rákattintasz egy linkre, akkor az újratölti az oldalt? Vagy új ablak? iframe? Vagy sikerült framesetet használni 2012-ben? (Brrrrrrrrr)
Ezek a kérdések elég fontosak, mert más megoldási lehetőségeket lehet az esetekben csinálni...
6) Egyébként ha tényleg dinamikus, akkor az .on() függvény segítségével tudsz eseménykezelőket rendelni a HTML elemek egy csoportjához - már előre, azelőtt, hogy ténylegesen létrejöttek volna. Nagy királyság. De nem biztos, hogy neked ez tényleg kell...
Szóval összegezve az biztos, hogy meg kellene barátkoznod a HTML-ben classok fogalmával, és sürgetőlegesen alkalmaznod a problémára.
Új hozzászólás Aktív témák
- BestBuy topik
- Yettel topik
- A fociról könnyedén, egy baráti társaságban
- Trollok komolyan
- Milyen okostelefont vegyek?
- Lalikiraly: Kinek milyen setupja van?
- Vezeték nélküli fülhallgatók
- Megérkeztek a Xiaomi 15T sorozatának telefonjai Magyarországra
- Linux kezdőknek
- Kerékpárosok, bringások ide!
- További aktív témák...
- Sapphire Pulse 6800XT 16Gb Kitűnő! Ingyen posta!
- Cisco Telepresence MX300 G2 - 55" Interaktiv Monitor - Konferencia rendszer
- 70" Interkativ Érintőképernyős Monitor / All In one PC - InFocus INF7021A Multi Touch
- Microsoft Surface Hub (v1) 1597 - 55" All in One PC - Érintőképernyős monitor
- Dell PowerSwitch N2048 48 Port Gigabit Ethernet 2 Port 10Gb SFP+ Switch
- ÁRGARANCIA!Épített KomPhone Ryzen 5 5600X 16/32/64GB RAM RX 7600 8GB GAMER PC termékbeszámítással
- Telefon felvásárlás!! iPhone 16/iPhone 16 Plus/iPhone 16 Pro/iPhone 16 Pro Max
- Telenor 5G Indoor WiFi Router (FA7550) + töltő
- BESZÁMÍTÁS! MSI B550M R7 5800X 32GB DDR4 1TB SSD RTX 3070Ti 8GB Zalman T4 Plus Cooler Master 750W
- BESZÁMÍTÁS! Asus H370-A i5 9600K 16GB DDR4 512GB SSD RTX 2060 Super 8GB Zalman T7 Zalman 500W
Állásajánlatok
Cég: NetGo.hu Kft.
Város: Gödöllő
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest



