- Álláskeresés, interjú, önéletrajz
- Mobilinternet
- Rendszergazda topic
- Vodafone otthoni szolgáltatások (TV, internet, telefon)
- Bocsánatot kért az Apple, mert nagyon mellélőtt a legutóbbi reklámjával
- Anyagi katasztrófára figyelmezteti az Apple-t a brit média
- Asustor NAS
- Milyen routert?
- SkyShowtime
- ASUS routerek
Új hozzászólás Aktív témák
-
Sk8erPeter
nagyúr
Ha már javítgatod: a második kódodban csinálsz egy ilyet:
$('#select').change(function (value,index) {
var res_array = $('#select').val();
...
});
Itt az újabb $('#select')-nek nincs sok értelme, akkor már $(this).val();Amúgy most végül is a lényeg szempontjából mindegy, hogy egy .each-csel bejárod az elemeket, vagy majd a te kódodban a res_array tömbön mész végig egy for ciklussal... szóval olyan nagyon nem misztifikálta túl.
[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
Szerintem nem "édesmindegy".
Egyébként most ez kicsit vicces, hogy azt írtad, hogy Trisztán kódja túl van misztifikálva, aztán lényegében ugyanazt csinálod, csak picit nehezebben olvasható szintaktikával... Pont ezt írtam itt szerk. után, hogy attól még, mert más volt az ő megközelítése, attól még nem volt túlmisztifikálva... trisztan94 védelmében, ha már megjegyezted, hogy rosszul csinálja (pedig nem, csak azt csinálta rosszul, amit te is, hogy az adott selectoron belül ugyanazt a selectort felhasználta még egyszer), akkor már érdemes megvitatni. Meg amúgy sem kell magára vennie senkinek, ha javítanak a kódján vagy javasolnak alternatívát, ez a topic többek közt ilyenek kivesézésére is való, hogy mi lehet jó/jobb megoldás.[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
"itt a belső $('#select option:selected").each -nek semmi értelme, mert nem tud az ember többet kiválasztani csak egyet, így ez felesleges"
Már miért ne tudna többet kiválasztani? Pont te linkelted be a multiple attribútummal ellátott selectet...
De most gondold már végig: akkor itt ebben a kódodban miért használtad mégis az each-et, ha szerinted "felesleges"?A szerk. után írt kódod meg tulajdonképpen értelmetlen, mert ciklusszintaktikát használtál egy lépésre:
for(var i=0; i<1; ++i)[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
Az ő kódja viszont működik mindkét esetre, a tiéd meg nem. Akkor melyik a jobb, ha úgy döntesz, hogy multiple lesz, akkor két helyen kell átírni, vagy csak egy helyen? De a te megközelítésed sem rossz, de úgy állítottad be a kódját, mintha valami óriási plusz terhet rakott volna rá a feladatra.
Szerk. (úgy látszik, mindig szerkeszteni kell, mert mindig utána is írsz valamit ):
De, pontosan értem, amiről beszélsz, de kicsit túlzottan kötekedősnek éreztem a hozzászólásodat trisztan94 kódjára, ezért mondtam el, hogy annyira nem rossz, amit csinált, még ha lehet is javítani rajta (például a szerinted "édesmindegy" azonos selectort, ami lényegében rossz megközelítés).[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
"ha valami rossz kismanó átírná a kódját multiple selectre, akkor igen lefutna, egyébként meg nem"
Abban a formában is lefut, amit ő írt, úgyhogy ez nem igaz...Szerk. (mert megint írtál pluszt szerk. után):
jahh, az én célom nyilvánvalóan mindig csak a kötekedés, nem is ám az, hogy ne maradjanak kétes minőségű kódok a topicban javítás nélkül, ha visszakeresel a hsz.-eimre, nem segítettem ám senkinek, neked sem, nem válaszoltam ám a te kérdéseidre sem, veled is mindig CSAK kötekedtem, másból sem áll a tevékenységem... De nyilván most jól megmondtad a magadét, és szükséges volt általánosítani.
De akkor majd ignorálom a hsz.-eidet, és akkor nem lesz problémád.
Azt azért még hozzáteszem, hogy az én kezdeti fórumos tevékenységem során és most is mindig nagyon jól jöttek és jönnek az ilyen rendkívül szemét "kötekedő" hozzászólások, amikor valaki javította/javítja a hibáimat, én inkább örültem neki, ha valakivel ilyet meg tudtam vitatni, mintha hülyeségeket hagyott volna a fejemben.[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz trisztan94 #1888 üzenetére
"Mi a kulonbseg jelen estben az each es a find kozott? Nem kell megegyszer hivatkozni ra id-vel?"
Félreértettél. Nem az each-csel van a baj, hanem azzal, hogy ugyanazt a selectort félrevezető lehet itt felhasználni, meg felesleges.
Tehát mondjuk $(this)-szel is meg lehetne oldani, tiédet gyorsan átalakítva:
http://jsfiddle.net/aBcnr/1/
Most a szemléltetésért direkt raktam multiple-re, ebben jogos, amit Jim-Y korábban mondott, hogy ennél nem lenne feltétlenül szükséges az each, mivel egyetlen elemről van szó.
Aztán tömbszerűen, erről szintén volt már szó:
http://jsfiddle.net/aBcnr/2/Szerk.: ja, egyébként jsFiddle-nél érdemes használni a TidyUp gombot, szépen formázza a kódot.
[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz martonx #1892 üzenetére
"Ismét megerősítést kaptam, hogy fejlesztés közben azért a pár percnyi idő előnyért jó eséllyel öngól bármilyen third-party lib-et használni, mert később azt az időt többszörösen elveszted"
Ő, na de nem lett volna egyszerűbb nem átállni az 1.9-esre? Mivel abban még van IE-támogatás is, ami mellett érveltél, hogy jó, ha nincs (2.0 fölött), mivel akkor azzal lehet spórolni a kódbázissal... na de milyen tényleges előnyöd származott az 1.9-esre átállásból? Volt olyan újítás, amit így ki tudtál használni, és emiatt megérte az egész procedúra?Sk8erPeter
-
Sk8erPeter
nagyúr
válasz trisztan94 #1891 üzenetére
Hát a kettő igazából nem ekvivalens, hogy függvénybe rakok-e valamit, vagy mondjuk jQuery-plugint írok, vagy OO-jelleggel írom meg; feladattól függ. Ha például konkrétan ilyen feladatról van szó, hogy sok DOM-elem átalakításával, felhasználásával kapcsolatos feladat merül fel, akkor érdemes plugint írni rá (lásd például a jQuery UI pluginokat is, mint a datepicker, ott is egy input elem "viselkedését", kinézetét befolyásolod), ha csak valami szimpla feladatról, mint annak eldöntése, hogy egy szám páros vagy páratlan, akkor sima függvényt lehet írni rá (pl. function isOdd() vagy ilyesmi), ha objektumorientált gondolkodást igénylő feladat merül fel, mint hogy mondjuk van egy autó, aminek különböző tulajdonságai vannak, vagy van egy fiú és lány objektumod, szintén tulajdonságokkal felruházva, akkor OO-jellegű kódot érdemes írni rá, de nem indokolt a plugin... szóval a feladat függvényében érdemes dönteni. Általában azért nem nehéz eldönteni.
"Én nem rég tértem át a sima hívásokról a function-ök használtatára, sokkal jobban szeretem."
Mik azok a "sima hívások"?"Nem egyszerűbb egy fájlban tárolni gyorsaság szempontjából?"
A jobb CMS-eknél be lehet kapcsolni, hogy a sok-sok CSS- és JS-fájl helyett ezen fájlok aggregálása legyen aktív, tehát sok-sok különálló fájl helyett egyetlen fájlba bepasszírozott, lehetőleg valamennyire minimalizált változatot include-olnak a fájlba (nyilván külön ömlesztett CSS- és ömlesztett JS-fájl), ez így egyetlen fájllekérést eredményez a szerver felé mondjuk a 20 helyett, és ki vannak szedve a whitespace-ek is, így kevesebb ideig tart rajta a kliensnek végigrohangászni, plusz kevesebb helyet foglal, stb... ez adott esetben sokat számíthat teljesítmény szempontjából. A kliensnek is kevesebb fájlt kell behúznia, cache-elnie, valamint a szervernek is kevesebb fájlt kell kiszolgálnia, mindkét oldal számára jó lehet. Olvashatóság, fejleszthetőség szempontjából persze nem ez a jó, de itt nyilván élesbe helyezett oldalakról van szó, ahol érdemes az aggregálást választani.Sk8erPeter
-
Sk8erPeter
nagyúr
válasz trisztan94 #1896 üzenetére
"Lehet, hogy én értettem félre, nekem abszolút az jött le, hogy a leg- lepkefingnyi kódot is pluginba írjuk, mert az milyen jó."
Erre a válasz megint az "attól függ". Indokolt esetben "lepkefingnyi" kódot is érdemes lehet pluginba rakni, ha adott DOM-elemek manipulálását egyszerűbbé teszi. Erre sincs általános szabály.
Mindenesetre az tény, hogy a jQuery plugin nem egy nagyon misztikus valami, nem is nehéz írni, de hasznos lehet, viszont nem is kell rá úgy tekinteni, mint egy gyógyír az összes problémádra. Egyébként legalább egyszer próbáld ki, hogy írsz egy tök egyszerű jQuery plugint, nagyon jó a dokumentáció a jQuery hivatalos oldalán, meg rengeteg tutorialt lehet találni a témában. Ha legalább egyszer kipróbáltad, milyen az, akkor segít eligazodni, hogy mikor lehet érdemes plugint írni. Akár 20 perc alatt át tudsz futni rajta, hogyan kell, mit kell tudni róla nagyvonalakban, és meg tudod írni a legegyszerűbb pluginedet, szóval érdemes rászánni azt a kevés időt.""Mik azok a "sima hívások"?"
$('#valami').click(function() {
//do stg
});
Ezek helyett a "sima hívások" (van erre valami szakkifejezés? nem jut eszembe )"Uhh, hát itt megint csak valami fogalomzavar van. Ez a "sima hívás" egy eseménykezelő akar lenni... a click eseményre feliratkozol (így szokták mondani) egy eseménykezelővel. Tehát annyi ennek a lényege, hogy amennyiben #valami elemre ráklattyolnak, akkor ez a függvény fog lefutni. Jelen esetben itt egy úgynevezett anonim függvénnyel iratkoztál fel az eseményre. De nem kell, hogy az a függvény anonim legyen, a függvénypointeres szintaktikával is lehet:
function myFunction() {
// do something
// ....
}
$('#valami').click(myFunction);Ugyanaz fog történni. A különbség az, hogy jobban elkülönül a kettő. De itt sem egyértelmű, hogy egyiket vagy másikat "érdemes" használni - ha sokszor használod fel mondjuk az adott függvényt, máshol is van rá szükség, akkor nyilván érdemes így szétválasztani, ha egyetlen helyen lesz felhasználva, akkor nem kell, sőt, adott esetben olvashatóság szempontjából még jó is lehet, hogy "egy helyen van".
"Én próbálok mindig objektum orientált lenni, sokszor kísért meg a "sötét oldal", hogy inkább lesz*rom, gányolok, úgy is működni fog"
Ez ismét képzavar, ha valaki nem objektumorientáltan kódol, az nem azt jelenti, hogy gányol.
Scriptnyelvekben például nem feltétlenül kódolsz objektumorientáltan, aztán mégis lehet úgy is igényes kódot írni."Az append az nem egy szinten van a DOM-ban a <li>-vel?"
Hogy micsoda?"Tehát ha jól értem, akkor nem a <li>-re kéne append-olni, hanem az ő containerjére, nem?"
Nem. A <li>-hoz is lehet appendolni, kódodban hozzáfűzve a Lorem ipsum dumát:Egyébként van .slideToggle() is, ami kicsit egyszerűbb.
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz martonx #1898 üzenetére
"Valójában semmilyen előnyöm nem származott az átállásból."
Megérte.Akkor most végül is jól értem, hogy a felhasznált egyéb pluginekbe is bele kellett tákolni amiatt, hogy kompatibilisek legyenek az új verzióval? Mert az sem túl szép dolog.
Egyébként pl. Drupalnál úgy oldják meg, hogy nem szoktak jQuery-váltások lenni, csak major Drupal-verzióváltáskor. Van jQuery Update, ami kicsit frissebb verziót rak fel, és ami agyontesztelt mindenféle beépített dologra, de contrib moduloknál még ez sem biztos, hogy szerencsés, mert okozhat problémát, bár ez ritka. Drupalnál pont azért nem váltanak, mert sok hibalehetőség van abból, hogy frissebb jQuery-verziót szeretne valaki használni. Ez persze nagyon új plugineknél szívás is, de megvan az előnye is (az inkompatibilitási parák elkerülése).
Amúgy milyen pluginekkel szívtál, amelyek nagyon nem voltak hajlandók működni az új verzióval?
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz trisztan94 #1923 üzenetére
Most nem értem, melyik a kérdés, hogy lehet-e az egészen gyorsítani, vagy hogy ne slideDown-oljon addig, amíg be nem fejeződött a szerveroldallal a kommunikáció?
Nyilván gyorsítani a szerveroldali kommunikáción úgy lehet, hogy megoldod, hogy gyorsabban adjon választ a szervered.
Azt meg, hogy csak az eredmények tényleges megérkezésekor legyen slideDown, úgy tudod megoldani, hogy a callback-be rakod bele a slideDown-t, nem az aszinkron híváson kívülre.
Tehát pl.
...
$.post("Action/LoadTutorials.cshtml", { category: ClickedCategory },
function (data) {
$('.TutorialsSlideDown').html(data);
//DIV megjelenítése
$('.tutorial_listing').slideUp(400);
$('.TutorialsSlideDown').slideDown(400);
});
//ajax kérés vége
...Sk8erPeter
-
Sk8erPeter
nagyúr
Lefuttathatsz keresést előtte egy sima ciklussal, ha van valami azonosító az objektumon belül, hogy van-e már ilyen, ha igen, visszatérsz a függvényből. Vagy ha már jQuery topic, van ilyen módszer is, $.grep: http://stackoverflow.com/questions/7364150/find-object-by-id-in-array-of-javascript-objects/7364307#7364307
De mondom, mezei saját JS-függvényt is írhatsz erre gyorsan.Sk8erPeter
-
Sk8erPeter
nagyúr
Objektumegyenlőségek vizsgálatával kapcsolatban itt van egy topic:
http://stackoverflow.com/questions/1068834/object-comparison-in-javascriptHozzáteszem, az elfogadott válaszban iszonyat nagy gyökérség, hogy ennyiszer megy végig az objektumon. Már eleve azzal megduplázza a futási időt, hogy egyszer végigmegy rajta, megnézi, van-e undefined kulcs a másikban, aztán végigmegy még egyszer...
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz trisztan94 #1956 üzenetére
kódodból:
$('.TutorialsSlideDown').slideDown(400, function () {
$('.TutorialsPagination').bind('click', function () {
//ajax kérés a lapoztatásra
$.post("Action/TutorialsPagination.cshtml",
{
page: 2
},
function (data) {
$('.TutorialsSlideDown').html(data);
alert(data);
});
//ajax kérés vége
});
});eleve rossz a koncepció. A slideDown callback-jében írod meg, hogy a .TutorialsPagination class-szal ellátott elem event handlere a click eseményre ezt meg azt csinálja... nem jó. Minden lapozáskor ezt megcsinálod. Szedd külön, az event handler a click-re eleve az elején legyen már rákötve, és valami data-attribútumtól, vagy globális változótól függjön (inkább előbbi!).
A koncepciót alakítsd át.Sk8erPeter
-
Sk8erPeter
nagyúr
válasz trisztan94 #1958 üzenetére
Ja. De csak egy lehetséges megvalósítás a sok közül. De az eredeti koncepció rossz.
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz trisztan94 #1960 üzenetére
Egész konkrétan amúgy hogy szeretnéd az egészet megvalósítani, hogy nézzen ki? Nem néztem végig a kódodat, csak ez egyből feltűnt.
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz trisztan94 #1962 üzenetére
Ja értem. Szerintem amúgy jobban jársz, ha a töltődést jelző kép egy background-image, és van egy ehhez tartozó div, amire csak ráraksz egy loading class-t, aminek megvannak a maga tulajdonságai CSS-ben (szélesség, magasság, maga a töltődést jelző háttérkép). Így csak megjeleníteni és eltüntetni kell ezt a bizonyos divet (elég a <div class="loading"></div>). De végül is nem ez a lényeg.
Tehát betöltéskor (vázlatszerűen)
1.) megjeleníted a töltődést jelző képet
2.) elküldöd szerveroldalra AJAX-szal, hogy milyen tartalmat szeretnél megjeleníteni, esetleg azt is, hogy annak hányadik oldalát
3.) lekéred a tartalmat, a következőket berakod egy asszociatív tömbbe (most feltételeztem, hogy PHP-vel dolgozol, de végül is mindegy), amit majd átalakítasz JSON-formátumra (pl. PHP-ben json_encode()-dal, mert azt kliensoldalon nagyon könnyű kezelni jQuery-vel!):
- hány oldalas a tartalom
- épp hányadik oldalt fogod abból megjeleníteni
- magát a tartalmat
- esetleg egyebet, ami neked kell (pl. a cikk címét is itt érdemes beállítani
- legyen státuszjelző, sikeres volt-e a lekérés, esetleges hibaüzenet, stb.
4.) kliensoldalon az előző lekérésnek a callback-jében (!!) vizsgálod, sikeres volt-e a lekérés, ha nem, megjelenítesz valami felhasználóbarát üzenetet (érdemes ezt is egyébként szerveroldalon beállítani, ne a kliensoldalra bízd! - de természetesen azt is kell kezelned kliensoldalon, ha már eleve a szervertől nem kaptál vissza adatot, de ez egy error callback-ben történik, nem pedig a success callback-ben), eltünteted a töltődést jelző divet, animálgatsz, amit akarsz, és betöltöd a megfelelő divbe a tartalmat, valamint az oldalszámokat (aktuális/összes), beállítod az új oldalcímet, mindezt a JSON-adatból kinyerve.
A lényeg, hogy a JSON-adatból mindenféle fontos információ kinyerhető legyen, tehát ezeket már eleve szerveroldalon állítsd be, hogy kliensoldalon aztán tök egyszerű legyen vele dolgozni.[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz trisztan94 #1964 üzenetére
Javaslom, hogy teszteld: alakítsd át szerveroldalon JSON-né a választ (tömb, Dictionary, class, stb.), majd kliensoldalon, a megfelelő $.ajax() függvény success callback-jében egyszerűen egy console.log(data) segítségével írasd ki a callback function argumentumát, és meglátod, milyen egyszerű lesz kezelni.
Pl. tudod vizsgálni, hogy
if(data.status === "success"){
// ....
}
ha korábban, szerveroldalon beállítottad a status property-t is. Tényleg egyszerű kezelni, próbáld ki.Sk8erPeter
-
Sk8erPeter
nagyúr
válasz trisztan94 #1972 üzenetére
"Mi az a Dictionary, class, stb dolog?"
Hát a class-t (osztály) gondolom csak nem kell már magyaráznom... Erre már azóta példát is adott martonx. Na, például itt lehetne egy status változód is, aminek az értékét a query lefutásának sikerességétől teszed függővé.
Ez az egész lesz aztán JSON-né konvertálva, ezt pedig kényelmesen feldolgozod jQuery-vel a válaszban.A korábbi asszociatív tömbös megoldást azért említettem, mert először abból indultam ki, hogy PHP-vel dolgozol. Egyébként alapvetően ez PHP-ben is szebb egy ilyen célra szánt osztállyal megvalósítva.
Olyasmiről beszéltem előtte, amit Jim-Y mutatott, de az helytelen szerintem, hogy result.0.name, mivel ez eleve nem is kifejező, meg nem túl szépen olvasható, akkor ebben az esetben inkább így a jó: result[0].name - így egyből látszik a tömbös megközelítés is.A Dictionary-ről:
http://msdn.microsoft.com/en-us/library/xfhwa508.aspx
De egyébként ezt csak lehetséges példaként említettem.Sk8erPeter
-
Sk8erPeter
nagyúr
Igen, simán lehet, mivel általában a CMS-eknek viszonylag kötött, többnyire valamelyest moduláris szabályaik vannak arra, hogy hogyan lehet egy kódot a megfelelő helyre, a megfelelő módon injektálni. Nem mindegy, ezért kell olvasni a dokumentációt.
Milyen CMS-ről van szó?Sk8erPeter
-
Sk8erPeter
nagyúr
válasz fordfairlane #1991 üzenetére
"Lehetséges, ha például más programrész rész is használja a document ready metódust"
Itt nem egészen értettem, mire gondoltál, a ready-nek több event handlere is lehet:
http://jsfiddle.net/y9eZZ/Sk8erPeter
-
-
Sk8erPeter
nagyúr
Szerintem nem feltétlenül szükséges hozzá jQuery, már ha egyáltalán jól értem a problémát, hogy megfelelő helyre kell betenni az adott scriptet, és ott lefuttatni...
.appendChild()-dal hozzáfűzhető plain JS-sel egy script tag...
Ilyesmi? --> http://jsfiddle.net/VJNMb/
[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz trisztan94 #2001 üzenetére
Nem, nem erre gondoltam, és egyáltalán nem felesleges a státuszváltozó. Miért lenne már az? Baj, ha a szervertől visszakapott válaszból értelmes adat is kinyerhető a konkrét állapotról?
Több eset is elképzelhető, amikor szükséged lenne a státuszra vonatkozó változóra. Például ha keletkezik egy exception az adatbázissal való kommunikáció során, akkor ezt le kell kezelni, felhasználóbarát üzenet formájában jelezni, hogy para volt, próbálja később, satöbbi. Ettől még az AJAX-kommunikáció során a success callback-be (!!) kell, hogy lépjen a script, mert attól még a válasz 200 OK HTTP-kóddal, gond nélkül lefutott, az már másik kérdés, hogy nem azt a választ kapta a júzer, amire kíváncsi lett volna. Például ebben az esetben lehet, hogy az a feladatod, hogy ha ilyen jellegű hiba volt, akkor legyen valami ilyesmi kódod:
... function(data){ // success callback...
if(data.status === "error") {
szálljon_el_egy_vörös_sárkány_a_képernyőn();
jelenjen_meg_egy_óriási_hibát_jelző_div_a_felhasználó_arcába_tolva();
szólaljon_meg_egy_drámai_hatást_keltő_zene();
most_kezdjünk_valamit_a_hibakóddal(data.code);
return;
}
// egyébként meg fusson le a sikert jelző kód
// ...
}...Remélem nagyjából érthető, hogy mi a lényege az egésznek... (az olvashatóság érdekében nem camelCase-zel írtam )
Igenis szükség van a státuszt jelző változóra, szükség lehet konkrét hibakódra is, mint a pszeudokódban is látszik, és ha már elkezdesz ezzel foglalkozni, akkor kezdd el igényesen, később is felhasználható módon.A PHP-t ne sírd vissza sztem, ha ASP.NET-ezel, mert akkor valahol az igénytelenséget sírod vissza.
Sk8erPeter
-
-
Sk8erPeter
nagyúr
válasz trisztan94 #2028 üzenetére
Ennyiből nehéz mit mondani. $(document).ready() eseményre kötötted?
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz trisztan94 #2033 üzenetére
"TypeError: $(...).tooltip is not a function"
Magyarul nem a sima jQuery-kódnál vérzett el, hanem amikor a Tooltipet akartad használni, nyilván akörül kellene keresgélni a problémát...Sk8erPeter
-
Sk8erPeter
nagyúr
válasz vakondka #2038 üzenetére
Nagyon favágó megoldással:
http://jsfiddle.net/Sk8erPeter/P8dJR/15/
Amit lehet, jobb megoldani sima CSS-sel (pl. background-color a hoverre, meg csak osztályok hozzáadása/elvétele, így nem a JS-kódba van bedrótozva a megjelenítés!).
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
-
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
-
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
-
Sk8erPeter
nagyúr
válasz martonx #2066 üzenetére
"Ez így nekem gyanús: $("tt").on({... bár elvileg ennek is működnie kellene."
Igazából nem is kellene úgy működnie, ahogy ő megadta, tehát így:
$("tt").on({
click: function(){
..............
}
});kétféle paraméterezés:
".on( events [, selector ] [, data ], handler(eventObject) )
events
Type: String
One or more space-separated event types and optional namespaces, such as "click" or "keydown.myPlugin".
...
.on( events [, selector ] [, data ] )
events
Type: PlainObject
An object in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s)."[ Szerkesztve ]
Sk8erPeter
-
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
Oh, sorry, azt a részt már elfelejtettem megnézni. Benéztem.
Az viszont akkor is hiba, hogy egyszer $_POST['action']-t használsz, máskor pedig $_GET['action']-t. Na meg azt is ellenőrizni kell, hogy létezik-e egyáltalán az adott index. Gondolom tudod, de ha már szemléltető kód...
Szóval:
$action = isset($_POST['action']);
HELYETT pl.
$action = isset($_GET['action']) ? $_GET['action'] : NULL;innentől kezdve pedig csak az $action értékét vizsgálgatni (NULL-lal egyenlő-e, ha nem, akkor meg volt adva action, aztán jöhet akár egy switch-case is, vagy egyre komplexebb dolgok
Sk8erPeter
-
Sk8erPeter
nagyúr
Ja, de félre ne értsd, nem téged blamállak, ezeket csak azért írom le, hogy legyen némi korrekció is. Legalábbis én szeretem, ha kódomban lévő hibákat korrigálják, mert abból én is tanulok, meg másnak sem a rossz infó marad meg.
Amúgy sejtettem, hogy csak gyorsan összedobáltad, mondom, csak korrekció gyanánt írtam.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
-
Sk8erPeter
nagyúr
válasz Speeedfire #2092 üzenetére
"Hogyan tudok object névben változót használni?"
Mi az az "object név"? Ilyenről most hallok először.var ch_id = $(this).attr('ch_id');
var ch_limit = $(this).attr('ch_limit');
var post_ch_id = "CampaignChannels["+index+"][CHANNELS_ID]";
var post_ch_limit = "CampaignChannels["+index+"][CHANNELS_LIMIT]";
var post_channels = {post_ch_id : ch_id, post_ch_limit : ch_limit};Ebben a kódodban igazából a post_ch_id és post_ch_limit változókat egyáltalán nem is használtad fel.
Ami ebben az esetben működne, csak nagyon ronda:
var post_channels = {post_ch_id : post_ch_id, post_ch_limit : post_ch_limit};Sk8erPeter
Új hozzászólás Aktív témák
- HiFi műszaki szemmel - sztereó hangrendszerek
- ASUS ROG PG32UCDM: OLED csúcsmonitor tesztje
- Amlogic S905, S912 processzoros készülékek
- Politika
- Van itt pár kép a Sony Xperia 1 VI-ról is
- Diablo IV
- Álláskeresés, interjú, önéletrajz
- The Elder Scrolls V: Skyrim
- Vicces képek
- PlayStation 5
- További aktív témák...
Állásajánlatok
Cég: Alpha Laptopszerviz Kft.
Város: Pécs
Cég: Ozeki Kft.
Város: Debrecen