Új hozzászólás Aktív témák
-
-
jeges
senior tag
mi okozza a problémát az eltüntetésben? logikailag a már megírt algoritmus használható némi kiegészítéssel:
var proid = $(this).attr("id").split("-");
var id2hide = ( (proid[1] * 1) == 1 ) ? 0 : 1;
var id2show = 1 * proid[1];ahogy megjeleníted a két elemet, úgy a másik kettőt el is tudod tüntetni.
-
jeges
senior tag
nos, nem véletlen, h visszakérdeztem, mer' nem volt egyértelmű, mi okozza a problémát. a kód egyébként bizonyosan tudni fogja, hogy nyitva van-e, ha megkérdezed tőle. pl:
$(".help").each(function(){
if($this.css("display") != "none"){ ... }
});vagy (ha pl nem szereted az .each() -t) hover-re adsz az elemnek egy "hover" (vagy akármilyen) class-t, és azt használod
$(".help").bind("mouseover",function(){ $(this).addClass("hover"); });
$(".help").bind("mouseout",function(){ $(this).removeClass("hover"); });így a fenti helyett:
$(".help").not(".hover").prev().css("display","none"); -
martonx
veterán
jeges az each funkciót az ellenőrzésre értette.
Ami jó is, csak te most már kevered a szezont a fazonnal.
1. Ellenőrizd le, hogy melyik elemre ment a kattintás, ezt még az each előtt (ezt meg is tetted).
2. Majd jöhet az each, ahol először is vesd össze, hogy az adott elem amiben éppen azeach tart az a kattintott-e, vagy sem.
Ha nem a kattintott, akkor tüntesd el a képet, ha pedig pont a kattintott az, akkor jelenítsd meg a képet.Szóval nálad most ez az ellenőrzés hiányzik, mert ami ellenőrzésed van az hülyeség.
Én kérek elnézést!
-
jeges
senior tag
1 a hide() utáni 2 sor szinte biztos felesleges. ha hide-olod az elemet, utána sztem nem kell slidedown+slideup
2 az kavarhat még be, h else ágon van a slidedown+slideup. else helyett az .each utánra tenném, mert csak egyszer akarod végrehajtani.összefoglalva az .each-be csak a hide kell sztem, az eredeti slide-ok az each után külön egyszer végrehajtva.
-
jeges
senior tag
erre megoldás amit fent írtam: katt-ra adsz egy spec class-t a kinyitott elemnek, és azt vizsgálod. id-t is lehet, de a class valamivel rugalmasabb, kevésbé csúf, ha mondjuk törlöd, mint id esetében.
szerk: nézegettem is a kódot, hogy vajon mi az a h változó a névtelen függvényben
[ Szerkesztve ]
-
jeges
senior tag
a legegyszerűbb valszeg az lenne, ha a h != id helyett
preid != $(this).attr(id) - t írnál
ez a feltétel azt jelenti, hogy a klikk célelem és az each-ben éppen vizsgált elem id-je egyezik
ha ez a feltétel nem teljesül (azaz a klikkelt elemnél járunk az each-ben), és a vizsgált elem display-e nem none, az azt jelenti, hogy végrehajtás alatt van a kód. ebben az esetben meg kell szakítani a futást (azaz return false -
jeges
senior tag
de igazad van.
azt nem látom a kódban, hol vizsgálod, hogy display:none igaz-e.
a korábban megbeszéltek szerint akkor kell futtatni a slide-okat, ha
1) az each-ben ahhoz az elemhez értünk, amelyikre klikkeltünk - ez a két id összevetése
2) éppen nincs végrehajtás alatt a kód --> display nem "none"ez alapján a slide-os részt az else ágon belül még egy elágazásba kellene tenni
if ($(this).css("display") == "none"){...} -
jeges
senior tag
nem az a baj, hanem az, hogy a .click a .help-re vonatkozik, az .each pedig a .dt-re. ezeknek soha nem lesz egyforma az id-jük, csak a sorszámuk (a kötőjel utáni rész). azaz az id-t kell kivenni mindkét elemből, és csak a sorszámukat hasonlítani:
var postid = $(this).attr(id).split("-")[1];
if (id != postid){
... -
jeges
senior tag
az újra-felugrást valszeg nem fogod tudni megakadályozni. részlet a jquery dokumentációból:
"The .delay() method is best for delaying between queued jQuery effects. Because it is limited—it doesn't, for example, offer a way to cancel the delay—.delay() is not a replacement for JavaScript's native setTimeout function, which may be more appropriate for certain use cases."
ha a korábban elindított késleltetett futást szeretnéd törölni, arra csak a setTimeout vagy setInterval alkalmas.(mindenesetre írass ki egy $(this).css("display")-t is, hogy lásd, teljesül-e a feltétel.)
-
jeges
senior tag
ez rendben, de mint fent írtam, ha jól értem nincs garancia arra, hogy javítható a nem várt működés, amit a delay okoz. ezt valószínűleg a delay mellőzésével lehetne csak orvosolni.
egyébként most már helyes eredményre vezethet a két érintett id vizsgálata, csak magát a vizsgálatot kivetted a kódból - pedig korábban ez már működött. valszeg a display feltétel is jó volt, bár ezt lehetne tesztelni. -
jeges
senior tag
az if ág fut le (különben nem azt írná ki), de valami miatt nem jut érvényre a fadeout. ennek több oka is lehet: vagy a már lefutott, de késleltetett kód, vagy valami visibility jellemző.
setTimeout ügyében
a lényeg:
indítás:
var t = setTimeout(function(){...},1000);törlés:
clearTimeout(t);ha nem törlöd, lefut a function(){} 1 másodperc múlva
Nálad az indítást és megállítást az else és if ágakra lehet tenni (persze a definiálatlan t értéket kezelni kell)
-
Sk8erPeter
nagyúr
Bocs, hogy belekontárkodom, nagyon sok részletből kimaradtam, és nincs is időm elolvasni az egész korábbi társalgást erről a súgó-megjelenítős dologról, de tulajdonképpen minek játszol a visibility CSS-tulajdonsággal? Van ezzel valami különösebb célod? Csak kavarja az egészet, a slideUp/slideDown tulajdonság állítgatja a display property-t (és azzal együtt nyilván folyamatosan dinamikusan változtatgatja pl. a height tulajdonságot), annak elégnek kellene lennie.
Ezentúl tulajdonképpen nem látom be, miért is van szükség erre az id-t szétbontós dologra split() függvénnyel, nagyon rugalmatlan megoldás, könnyű elrontani. Ha már ilyen módon van felépítve, nyugodtan lehetne a siblings() VAGY prev() vagy next() függvényeket használni. Egyébként is érdemes lenne egy nagyobb div-be vagy hasonlóba bepakolni magát a kérdőjelet, plusz a hozzá tartozó súgót, hogy logikailag is összetartozzanak, és akkor máris el lehet kerülni azt, hogy az id-k nevéből kelljen kisajtolni egy számot, majd erre hivatkozni, stb... melós. Amúgy amikor azt az esetet veszem, amit a 3. pontban írtál, látszik, hogy a display block-ra állítva marad, csak a visibility változik. Mintha egyáltalán nem törlődne az időzítés a clearTimeout-nál.
(Megjegyzés, hogy szerintem az ilyen elnevezések, mint a var css; és ehhez hasonlók, nem túl szerencsések, mert könnyen megkavarhatják az embert hosszabb kódnál (lásd ugyanilyen nevű függvény is van jQuery-nél). Lehetne inkább var dt_display; vagy valami ilyesmi, csak ne hasonlítson foglalt nevekre.)
Egyébként elméletileg nem lenne szükség az each() függvényre, ahogy ugye itt a slideUp() függvénynél is sok div-et tüntet el egyszerű $("div").slideUp(); segítségével (ciklikusan végigmegy az összes egyező elemen).Igazából nem is kéne if-ekkel vizsgálgatni, miután végighaladtál ciklussal az összes elemen, hogy meg van-e jelenítve, ahogy most csinálod ( if(css == "block") ), hanem kattintáskor
1.) törölni az összes beállított timeout-ot
2.) egyszerűen a kérdőjelre való kattintásra vonatkozó (click) tulajdonságra rákötni, hogy az összes súgót tartalmazó elemet (nálad dt-t) slideUp-olja - még akkor is, ha egyetlen egy elem sincs megjelenítve, ez úgyis annyira gyorsan történik, hogy itt rohadtul nem számít, hogy végigvizsgálgattad-e egyesével; sőt, ezt megteszi helyetted a jQuery! Nyilván ha meg van jelenítve, akkor animálva eltünteti, a display-t a végén none-ra állítva, ha nincs, megy tovább a következő talált elemre.
3.) az adott elem melletti súgót tartalmazó elemet (buborékszerűséget) megjeleníteni slideDown-nal (vagy ahogy épp meg akarod jeleníteni a súgót)
4.) beállítani a setTimeOut-ot a kívánt időmennyiségre, aminek a végén slideUp-olod a súgót, hogy eltűnjön.Szóval szerintem bőven lehetne egyszerűsíteni a kódon.
[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz szmegma #2042 üzenetére
Hát itt vannak elég érdekes dolgok...
Pl. eleve az adataid kettőzését nem nagyon fejtetted ki, előbb azt kellene megoldani.
Aztán menjünk tovább:
$("span").html(returned_data);
Azt ugye tudod, hogy ez mit csinál?
Tessék, ezt:
http://jsfiddle.net/wSN3C/
van 14 spanem, mindet feltölti ugyanazzal a szöveggel...
nálad is ez a helyzet, van vagy 12 spaned (most csak hasraütésre), azok közül az ÖSSZESET feltölti a returned_data változó tartalmával. Nem hiszem, hogy Te ezt szeretnéd. De lehet, hogy az általad mutatott kódon kívül az oldaladon máshol is vannak spanek, na, akkor az oldaladon az összes spant feltöltené ugyanazzal a szöveggel. Egy kissé jobban illene specifikálnod a kódban, hova is szeretnéd betölteni a visszakapott tartalmat.$("span").empty();
Ugyanaz vonatkozik erre, mint az előbbi kódrészletre, csak itt épp kiüríted az összes spant - nem biztos, hogy túl szerencsés, amikor az oldalon található összes span-elem tartalmát eldobod.var filter = $("span").find("#sablon").html();
..
$("#sablon").html(filter);Ennek igazából mi értelme van?
$("tt").removeClass();
Miért lenne az jó, hogy az ÖSSZES osztályt eltünteted, ami az ÖSSZES oldalon szereplő tt-elemen van? Ismét nagyon rossz ötlet.Igazából a kód így nagyon zavaros és hibás.
Sk8erPeter
-
trisztan94
őstag
válasz szmegma #2046 üzenetére
A php fajlban szabalyozod, hogy mit kuldesz vissza. Ott írd át, hogy csak a neked kellő adatokat küldje vissza (gondom adatbázisból szedi a dolgokat, nem?)
Vagy az is jó amit Jim-Y irt, letrehozol egy fuggvenyt a php fajlodban es arra kuldesz kérést, bár ha csak ez az egy ajax keresed van az oldalon, akkor felesleges annak külön function-t létrehozni.
[ Szerkesztve ]
https://heureka-kreativ.hu
-
trisztan94
őstag
válasz szmegma #2052 üzenetére
"Egyebkent miert baj, hogy a visszatero adatot szeretnem szurni? Ezert lenne a filter() es find() fuggveny nem?"
Feleslegesen lassítja az oldalt. Nem egyszerűbb csak azt az adatod visszakérni amire ténylegesen szükséged van, nem kell szűrni? A te megoldásoddal így megy végig:
Elküldi a kérést a PHP-nak, ami visszaküldi az összes adatot. Ezt visszaküldi a scriptednek, ami végigmegy az adathalmazon amíg nem találja meg azt amire neked szükséged van (ha jól tudom a .find() lineárisan keres, nem? - a lineáris keresés a leglassabb keresés - szintén amennyiben jól tudom, javítsatok ki, ha tévedek), majd berakja neked a html-edbe.
Szűrés nélkül, ha csak arra kérsz kérést amire ténylegesen szükséged van:
Elküldi a kérést PHP-nak, ami feldolgozza azt amit mondtál neki, visszaküldi a scriptnek azt a specifikus dolgot amit kértél, a script meg beülteti a html-be.
Nem kell feleslegesen végigmenni az összes adaton, mivel tudod, hogy tutifrutti azt kapod amit kértél.
"Ez a POST-os megoldas nem jo, ui. akkor az "Utolsó frissítés: 2013 April 21." reszt torli a BODY-bol."
Átírtad a PHP fájlod, hogy működjön a POST-os megoldással? Ha nem, akkor nyilván nem fog működni. Ha nem érted a PHP-t, akkor írj a PHP fórumba, ott majd eligazítanak, hogy hogy kéne kinéznie.
Nekem amúgy nem törli az "utolsó frissítés" izét.Pontosan amúyg mit szeretnél elérni? Gondolom azt, hogy újratöltés nélkül tudja a user lapoztatni az oldalt, nem?
Amúgy szerintem azért válik inaktívvá a lapoztatás mert azt is minden kérés után újra betöltöd, azt külön kéne rakni az ajaxtól és egy változót létrehozni php-ban, ami visszaküldi a scriptnek, hogy hanyadik oldal volt előbb nyitva, vagy valami ilyesmit és onnantól kezdve gyerekjáték.
szerk:
Alapból a HTML kódod is elég zavaros, minek ennyi div?
<div id="news-tartalom" style="padding-bottom:1px;">
<div id="news" class="module">
<div>
<div>
<div>
<h3>CUCC</h3>
<div class="datum"> 2012 Október 20.</div>
<div class="hirek">bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb</div>
</div>
</div>
</div>
</div>
<div style="position:relative;width:370px;margin:0px auto 0px auto;padding:0;text-align:center;color:#999999;">
</div>elég lenne így:
<div id="news-tartalom" style="padding-bottom:1px;">
<div id="news" class="module">
<h3>CUCC</h3>
<div class="datum"> 2012 Október 20.</div>
<div class="hirek">bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb</div>
</div>
<div style="position:relative;width:370px;margin:0px auto 0px auto;padding:0;text-align:center;color:#999999;">
</div>[ Szerkesztve ]
https://heureka-kreativ.hu
-
Sk8erPeter
nagyúr
válasz szmegma #2044 üzenetére
"Termeszetesen tudom, hogy a $("span").html(returned_data); feltolti az osszes span-t a returned_data tartalmaval"
Na, akkor máris megvan az indok, miért ne csináld úgy, ahogy csináltad. Hülyebiztosra kell elkészíteni egy kódot, nem arra számítani, hogy "jó az vidékre"..."am az adott lapon csak ez az egy span van"
Ne viccelj már, amit itt megmutattál, abban a kódban egész pontosan 11 span is volt:
http://jsfiddle.net/jUECg/
Bár gondolom arra gondolsz, hogy ez a tartalom fog lecserélődni, a spanekkel együtt... de akkor is szar ez a kód így, nem szívatásból mondom, hanem azért, mert ezzel problémáid lesznek később, ha így kódolsz.
Szóval specifikáld jobban, milyen DOM-elemet szeretnél manipulálni, legyen beszédes a kódod!!
Vonatkozik ez tehát a spanre és a tt-re is.Miért ragaszkodsz a <tt> elemhez?
https://developer.mozilla.org/en-US/docs/HTML/Element/tt
ez már "obsolete", szóval ne használd. Ha teletype textre van szükséged, használj CSS-t. Amúgy is, szemantikailag is hibás a lapozó céljára <tt> elemet használni.Ahogy már a többiek is elmondták, nagyon rossz gyakorlat az, hogy a szerverről rengeteg felesleges adatot elküldesz a kliensnek, olyat is, amire nem kíváncsi, aztán kliensoldalon szűröd. Ezt a szokást felejtsd el örökre, csupán jótanács. Azt add vissza a kliensnek szerveroldalról, amire kíváncsi volt, és aminek érdemi funkciója van, ne többet, ne kevesebbet.
"Valamiert stingnek latja a visszatero tartalmat es nem objectnek, ezert syntax errort dob."
Érdemes olvasgatni a dokumentációt, ha problémával találkozol a kódod működése során, és nem érted, miért...
http://api.jquery.com/jQuery.ajax/
dataType
...
"html": Returns HTML as plain text; included script tags are evaluated when inserted in the DOM.Azt pedig a többiek már jól leírták, hogy a szervertől elkérendő adatokat szűrheted úgy, hogy megmondod neki, mit küldjön vissza, mégpedig a data-val, amire Jim-Y már mutatott neked példát.
Van példa a hivatalos oldalon is:
$.ajax({
type: "POST",
url: "some.php",
data: { name: "John", location: "Boston" }
}).done(function( msg ) {
alert( "Data Saved: " + msg );
});Ezt PHP-val a $_POST tömb részeként érheted el: $_POST[''name] és $_POST['location'], mivel meg lett adva, hogy POST-metódussal legyenek elküldve az adatok.
(#2052) szmegma
"Ez a POST-os megoldas nem jo, ui. akkor az "Utolsó frissítés: 2013 April 21." reszt torli a BODY-bol."
Nem a POST-tal való elküldéssel van a baj, hanem azzal, ahogyan megoldod. Egyébként lapozót NEM POST-tal szokás megoldani, hanem GET-metódussal! Így az URL könyvjelzőzhető, elküldhető másnak, és így tovább."Egyebkent miert baj, hogy a visszatero adatot szeretnem szurni? Ezert lenne a filter() es find() fuggveny nem?"
Adatszűrésre való, de nem arra, hogy a szervertől nyugodtan visszadobálj sokkal több adatot, mint amennyi kell, és aztán azt szűrögesd, azzal csak szívatod magad, a szerveredet és a klienst is. Felesleges terhelés.(#2055) szmegma
"Ehhez a megoldashoz szerintem az egesz lapozot jQuery-ben kellene megirni, mivel jelenleg a lapozo PHP-s, es a script visszakuldott id-je alapjan azonositja a lap szamat."
Félreérted. A lapozó először legyen úgy elkészítve, hogy JavaScript nélkül is működjön. Ezt tesztelgesd, és miután sikerült, azután az egészet lehet AJAX-osra megírni. Kipróbáltam, jelenleg egyáltalán nem működik JavaScript nélkül. Azért is fontos, hogy először úgy is működjön, mert akkor onnantól csak az egészet ugyanúgy át kell ültetni JavaScriptre, és megvagy.A lapozót az alján az AJAX-kérés után frissítened kell a szervertől visszakapott adatok alapján - amire az lesz a legegyszerűbb megoldás, ami amúgy is javasolt, hogy JSON-ben küldd vissza az adatokat a kliensnek a szervertől! Így mindenféle adatot tök egyszerűen ki tudsz nyerni a kliensoldalon.
A jelenlegi lapozód azért nem működik, mert az első lapbetöltéskor arra a lapozóelemnek a click eseményére iratkozol fel (a nálad látható $("tt").click(function(){})-nel), amit aztán eltüntetsz a DOM-ból az első AJAX-lekérés után, így mivel törlöd azt az elemet, az új lapozóelem click eseményére ismét fel kellene iratkoznod - erre való a jQuery.on():
http://api.jquery.com/on/A szervertől való JSON-adat visszaadására pedig vegyünk egy példát egyszerű spagettikóddal:
<?php
// blablabla...............
$dataToReturn = array();
$dataToReturn['status'] = false;
$dataToReturn['message'] = '';
$dataToReturn['page_nr'] = NULL;
$dataToReturn['data'] = NULL;
// na itt lekéred az adatot adatbázisból...
// viizsgálgatod, mi lett beállítva a $_POST tömbbe, megvan-e minden, ami kell az adatok visszaadásához, stb.
// ha volt valami gebasz, dobsz egy exceptiont, lekezeled, beállítod a felhasználóbarát hibaüzenetet a $dataToReturn['message']-be
if(para_volt) { // itt valami tisztességes kivételkezelésnek kéne lennie
$dataToReturn['status'] = false;
$dataToReturn['message'] = 'Para van...';
}
// egyébként meg a statust állíthatod true-ra:
// siker...
else {
$dataToReturn['status'] = true;
$dataToReturn['message'] = 'Sikeres blabla...';
$dataToReturn['data'] = '<p>ezmegaz</p>';
$dataToReturn['page_nr'] = 42;
}
echo json_encode($dataToReturn);
exit(0);aztán jQuery-vel tök egyszerűen lekezeled:
$.ajax({
type: "GET",
dataType: "json"
url: "valami.php",
data: { page: 12, akarmi: "asdasd" }
success : function(response) {
if(response.status == false) {
// hiba volt, kiírjuk, mondjuk a #content divbe, tételezzük fel, h van olyan
$('#content').text(response.message);
return false;
}
// egyébként meg sikeres volt a dolog
$('#content').html(response.data);
// mondjuk valahol frissíted a page_nr-t (csak példa)
$('#actual_page_nr').text(response.page_nr);
}
});Tényleg csak szemléltető kód, de szerintem (remélem) érthető, ha van kapcsolódó kérdésed, tedd fel nyugodtan.
Sk8erPeter
-
Male
nagyúr
válasz szmegma #2062 üzenetére
Gondolom azért mondja, mert JS nélkül sehol nincs belinkelve a többi oldal... ( ha igen, akkor bocs, nem néztem meg alaposan az oldalt )
Amúgy ha oldalakat töltesz be, akkor használhatod a .load() -ot is. (rövidebb, és kezdetben könnyebb szerintem)
Plusz a lapozó részt nem biztos, hogy célszerű újra tölteni, annak a módosítását JS-ben is elintézheted. -
Jim-Y
veterán
válasz szmegma #2062 üzenetére
Amugy az miért nem jó, ha magát a lapozót te állítod össze kliens oldalon js-el, úgy, hogy ajaxxal lekéred a php fájltól, hogy hány megjelenítendő oldalad van, azt javascriptben feldolgozod, és csak a tartalmat kéred le a szervertől lapozásra?
Sok hiba van benne, illetve joe editorban a szerveren írtam meg, nem akartam scpzni Ez csak egy skicc, de látszik, hogy mire gondolok.
-
Sk8erPeter
nagyúr
válasz szmegma #2067 üzenetére
"Szoval akkor megis csak nekem volt igazam."
Kár, hogy nem igazán. Terveztem neked írni ismét egy hosszabb választ, hátha sikerül közös nevezőre jutni, és megérted a szempontokat, de ezután a válaszod után úgy látom, hogy nem igazán érné meg ezzel töltenem az időt. Igazából a múltkori, bőlére eresztett válaszból sem tudom, mi jött át, pedig azért arra is szántam bőven időt, hogy megírjam, hogy sikerüljön rávilágítanom pár dologra, hátha hasznát veszed, és jól fog jönni a jövőben.Egyébként én sehol nem "sötéteztelek le", ha már nekem szántad a legutóbbi választ.
Majd ha megmutatod nekem, hogy működik a lapozód a test3.php oldaladon kikapcsolt JavaScripttel is, akkor majd beszélhetünk a továbbiakról. (Mondjuk ahogy jelenleg elnézem, a sima JS-es megoldás sem működik.)
Viszont a "csak azért is nekem volt/van/lesz igazam, hiába ugattok"-jellegű válaszodból úgy tűnik, nem igazán vagy vevő a közös konstruktív feladat-megoldásra, pedig hidd el, nekem aztán nem érdekem megoldani a te feladatodat, mégis segítettem, de én nem erőltetem, ha te úgyis jobban tudod.Sk8erPeter
-
Male
nagyúr
válasz szmegma #2069 üzenetére
A második, csak ne hagyd le a #-et, és csak azután csináld, hogy az új tartalom ottvan már, tehát meg fogja találni. (callbackbe beteszed és kész) Már ha cseréled ezt a lapozót is még mindig... nem néztem meg. (persze ha cseréled, és így tolod ki PHP-val, akkor meg eleve benne lehetne már az adott elemnél ez a class... totál felesleges kiküldeni aktív nélkül + elküldeni melyik az aktív, aztán ott kikerestetni, és aktívvá tenni)
Bár ez eleve gyanúsan néz ki: "lap."+lap
Biztos van az ID-ben pont is?#2071: Az pedig nem működik továbbra sem JS nélkül... kapcsold már ki a böngésződben a JS futtatást, és próbáld meg. Az egy dolog, hogy a PHP-d $_GET-ből is nézi az oldal azonosítóját, de ha semmi link nincs, ami így hívná meg a tartalmat, akkor az a lapozó nem működik JS nélkül.
[ Szerkesztve ]
-
Male
nagyúr
válasz szmegma #2075 üzenetére
A HTML spec.nek tudtommal megfelel, ha van az ID-ben pont. Ellenben a jQuery selector miatt gondot okoz... ugye megadhatod úgy, hogy "#akármiid", így ID-re keres, de megadhatod úgy is, hogy ".valamiclass", így pedig az adott class-u elemeket választod ki. Namost amit te beírtál, hogy "#lap.1" az a lap ID-jű ÉS 1 classal rendelkező elemet kereste, ami persze nincs az oldalon.
-
Male
nagyúr
válasz szmegma #2077 üzenetére
Jó az, csak még össze kell hoznod, hogyha JS van, akkor JS töltse az új tartalmat, ha nincs, akkor pedig éljenek a linkek.
Nem nagyon tudok lapozó témában nyilatkozni, mert egy általam nagyon nem kedvelt rész (se felhasználóként, se fejlesztőként), és ha csak lehet elkerülöm... főleg, hogyha JS-sel töltöd át, akkor még a címsorban is frissíteni kéne a linket, hogy aki onnan kimásolva küldi el valakinek, az egyből oda juthasson... Ilyen JS-es lapozást pl csak kis dobozokban csinálnék (vagy ha valami átmenetek kellenek a váltásnál), ha szinte az egész oldalt lecseréled, akkor hagyományos módon oldanám inkább meg. (Persze a megrendelő dönti el végső soron, hogy mit akar az oldalra, és az hogyan működjön.)
Az előzőmhöz még: az ÉS kapcsolat helyett lehet, hogy VAGY van... még soha nem kellett vegyítenem selectornál classt és ID-t.... de még megnézem, egyszer jól jöhet
[ Szerkesztve ]
-
Sk8erPeter
nagyúr
válasz szmegma #2071 üzenetére
"akkor a PHP lapozo kuka es mehet az egesz jQuery-be? Erre irtad nekem, hogy felreertem."
Igen, mert még mindig tartom, hogy félreértetted.
Na, akkor még egyszer, másképp: először működjön a lapozód úgy, hogy semmiféle JS-kódot nem erőltetsz.
Hiába mutogatod nekem a KÜLÖN lapozódat, az senkit sem érdekel, mert az úgy teljesen értelmetlen. Lásd a test4.php?pg=5 és hasonló címeket, amiknél maga a tartalom NEM jelenik meg lapozva, CSAK maga a lapozó. Azzal mit kezdesz? A felhasználó mit kezd vele?
Gondolj bele, ez olyan, mintha lenne egy könyved, amit két részletben kapnál: külön megkapnád az oldalszámokat, aztán külön a tartalmat. Rakd össze a kettőt. Amit mutogatsz nekem, az olyan, mintha a könyvből csak az oldalszámokat mutogatnád. Funkciótlan, értelmetlen.
Tehát a KOMPLETT oldal a lapozóval együtt (!!) először működjön JS nélkül.
Aztán az egész működését szépen átültetheted JS-be, ettől még kezelheted totálisan függetlenül a lapozót a tartalomtól!! Megközelítés kérdése.
Tehát lehet úgy, hogy tartalmat kiíratod, lapozót kiíratod, aztán JS-sel pedig külön-külön frissítgeted a lapozót a tartalomtól függően.
Amit Jim-Y itt mutatott neked, annak megint nem tudom, mi értelme, mert ott összegyűjti az oldalakat egy tömbbe:$oldalak = array();
$oldalak[1] = "Elso oldal";
$oldalak[2] = "Masodik oldal";
$oldalak[3] = "Harmadik oldal";
$oldalak[4] = "Negyedik oldal";
$oldalak[5] = "Otodik oldal";Hogy mi értelme van ezeket elküldeni egyben - amikor pont arról volt szó, hogy a tartalmak legyenek különbontva, csak az legyen elküldve a kliensnek, amire szüksége van -, az nekem megint csak homály. De majd megírja.
Igazából elég, ha megnézel egy jó lapozós oldalt úgy, hogy kikapcsolod a JavaScriptet, úgy biztos jobban meg fogod érteni.
Tehát a teljes oldalad úgy működjön, hogy query stringként megadod az aktuális oldalszámot. NE csak külön a lapozó!
Ha még mindig nem világos, akkor inkább kérdezz vissza, hogy egy nyelvet beszéljünk.A lényeg egy mondatban: ne boncold széjjel a lapozódat az oldal érdemi részétől, mert értelmetlen, a felhasználó úgyis egy requestben fogja lekérni, nem lesz kíváncsi külön a lapozódra, a tartalommal együtt manipuláld.
=====================================================
(#2078) Male :
jól írtad először, természetesen ÉS-kapcsolat van a selectoroknál.
Általában egyébként felesleges az id mellé még a class-t is hozzácsapni, de előfordulhat eset, amikor még pontosabban akarja specifikálni az ember, és csak akkor akarja manipulálni az adott elemet, ha mondjuk az adott id-jú elem még rendelkezik egy megadott class-szal is.Sk8erPeter
-
Sk8erPeter
nagyúr
válasz szmegma #2089 üzenetére
Yesss! Asszem kezdjük érteni egymást. Ja, ilyesmire gondoltam, hogy így kellene megcsinálnod először (nem "kértem", mert nekem nincs rá szükségem csak javasoltam, hogy először ezt csináld meg működőképesre, ne az AJAX-szal foglalkozz, amíg még az alapja sem működik), és most már akkor ezt lehet átültetni JS-re. A lényege ennek az egésznek éppen ez volt: először működjön JS nélkül, azután már foglalkozhatsz az AJAX-osítással.
Ahhoz pedig kellene egy olyan oldal is, ahol JSON-nel szolgáltatod az adatokat (tartalom, lapozó hol tart, hány lap van összesen, ill. esetleg egyéb adatok, ami kellhet; igazából ezt elvileg már a json_encode()-dal elvileg megcsináltad, ha minden igaz), hasonlóan egy REST API-féleséghez. Aztán erre az URL-re elküldeni egy GET requestet, hogy ezt meg azt az oldalt kéred (ezt az $.ajax() metódus data attribútumában elküldeni). Ha megkaptad, akkor a kapott adatok alapján frissíteni az oldal tartalmi részét, meg a lapozót is JS-sel.Sk8erPeter
-
Sk8erPeter
nagyúr
válasz szmegma #2091 üzenetére
Jónak tűnik!
Még amibe bele lehet kötni, hogy ha kikapcsolom a JS-t az oldalon, akkor megint csak nem működik, mert ezeknek a lapozóelemeknek LINKEKNEK kellene lenniük, amik az adott oldalra mutatnak.
Pl.
<nav>
<ul>
<li><a href="valami.php?page=1">1</a></li>
<li><a href="valami.php?page=2">2</a></li>
<li><a href="valami.php?page=3">3</a></li>
...
</ul>
</nav>Ezenkívül továbbra sem értem, miért ezt a <tt> elemet használod, amikor az rossz. Lehetne helyette pl. a fenti szerkezet.
Meg az picit zavaró, hogy nincs előző-következő oldalra mutató link, a számok MELLETT. Ha pedig valaki mondjuk egyből az 5. oldalra akarna ugrani, akkor zavaró, hogy előtte végig kell kattintgatnia a számokat, hogy végre az a link is megjelenjen.
De egyébként jó irányba haladsz!Sk8erPeter
-
trisztan94
őstag
válasz szmegma #2108 üzenetére
A return false annyit csinál, hogy az alapértelmezett eseményt nem engedi lefutni.
Tehát egy linknél az alapértelmezett esemény az, hogy átirányít a href attribútumban található útvonalra.
Tehát ha te egy linkre eseménykezelést használsz, tegyük fel egy ajax kérés miatt, akkor ugye nem akarjuk, hogy betöltse azt a lapot amit js nélkül betöltene, hanem kiszedjük belőle az infót és majd ajax-szal elintézzük.. Ilyenkor használjuk a return:false-ot.A return true meg pont ennek ellentéte
Mondjuk valami tulajdonság szerint engedjük a lefutást, pl egy formnál. Ha ki van töltve minden akkor return true (bár mondjuk ez az alapértelmezett, de én szeretem kiírni), különben return false (mert ott a submit gomb alapértelmezett eseménye a form elküldése)Szerk:
Nem láttam a php fájlokat, de egybe lehet rakni, csak az útvonalakat módosítsd, esetleg rakd külön class-be (vagy function-be) és ajax-szal azt a function-t vagy class-t hívod meg.[ Szerkesztve ]
https://heureka-kreativ.hu
Új hozzászólás Aktív témák
- Kávé kezdőknek - amatőr koffeinisták anonim klubja
- Autós topik látogatók beszélgetős, offolós topikja
- Debrecen és környéke adok-veszek-beszélgetek
- Milyen alaplapot vegyek?
- Samsung Galaxy A54 - türelemjáték
- Luck Dragon: Asszociációs játék. :)
- Kerékpárosok, bringások ide!
- Piacvezető tandem OLED panellel érkezik az iPad Pro
- AMD Navi Radeon™ RX 7xxx sorozat
- Horgász topik
- További aktív témák...