- Honor Magic V5 - méret a kamera mögött
- 165 Hz-es panelt tesztel a OnePlus
- Samsung Galaxy A54 - türelemjáték
- Jimmy Choo felel a Magic V Flip 2 dizájnjáért
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
- Motorola Edge 50 Neo - az egyensúly gyengesége
- Fenntartható, tartós kiegészítőket mutatott be a Fairphone
- Xiaomi 14T Pro - teljes a család?
- Zeiss triplakamera az új Vivo V60-ban
- Erős hardverrel érkezik a Honor 10 000 mAh-s mobilja
Hirdetés
-
Mobilarena
JavaScript != Java (A JavaScript nem összekeverendő a Javával, két különböző programozási nyelvről van szó!)
Új hozzászólás Aktív témák
-
Sk8erPeter
nagyúr
válasz
szucs.miki #2979 üzenetére
Két nagyon egyszerű, jQuery-s példát felraktam neked (ne felejtsd el betölteni a jQuery library-t a saját oldaladnál):
a .focus() vizsgálatával:
http://jsfiddle.net/Sk8erPeter/jVddH/a "disabled" attribútum felhasználásával:
http://jsfiddle.net/Sk8erPeter/jVddH/2/Talán utóbbi a szebb.
-
Sk8erPeter
nagyúr
Hát most kaptál pár ötletet.
(#2955) Karma :
ja, az igaz, hogy a látogatott topicokba bele szoktam vauvauzni (ha már kutya az avatarom), de gondoltam most minek dumáljak megint, már adtatok jó ötleteket.De amúgy kösz, ha érdekelt, a ti ötleteiteket is jó olvasgatni, mert így tud fejlődni az ember, hogy más véleményeket is lát.
-
Sk8erPeter
nagyúr
válasz
[pod]Diablo #2945 üzenetére
Jé most látom, hogy erre annak idején nem válaszoltam. Mondjuk annak idején azért, mert nem volt időm javítgatni a kódodat, miután még azt sem állítottad be jsFiddle-ön, hogy ne a MooTools library-t töltse be hozzá, hanem a jQuery-t...
Na meg ott volt az AJAX-os kérés, ami nyilvánvalóan nem működik jsFiddle-ön, amikor a saját oldalad címeihez van kötve. De vannak AJAX-tesztelő módszerek ott is. Aktuális még egyáltalán?
-
Sk8erPeter
nagyúr
Mé' pont én?
Túl sok tapasztalatom ilyen progress baros dologgal nincs, de mondjuk szerintem az is lehetne egy opció, hogy egy adatbázis-táblában lehetne tárolni egy adott "batch-folyamathoz" az aktuális állapotot, timestamppel, kiegészítő adatokkal együtt. Vagy úgy, hogy előre fel lenne töltve, hány darab feldolgozásra lesz szükség egy adott folyamatnál, aztán akár a részfolyamatok is bekerülhetnének, majd ha egy-egy feladat befejezésre került, ez törlődne a táblából; vagy úgy, hogy folyamatosan, egy adott rész elkészítésénél feltöltögetésre kerül ez a tábla, aztán a végén ezt lehetne csekkolni, kiíratni mindenfélét, majd lehet tisztítani az ide bekerült adatokat.
És ennek a táblának az aktuális folyamathoz tartozó állapotát is lehetne pollozni AJAX-szal.
Legalábbis így elsőre szerintem még ez lenne a legegyszerűbb. De biztos ezt a feladatot is vagy 25-féleképpen meg lehetne oldani, de nekem most ez jutott eszembe első körben. -
Sk8erPeter
nagyúr
válasz
SektorFlop #2943 üzenetére
Lehet, miért ne.
Végül melyik megoldást választottad? -
Sk8erPeter
nagyúr
válasz
[pod]Diablo #2941 üzenetére
Pont ezért írta korábban Karma, hogy jsFiddle-re rakjál már fel példát, hogy lássuk, mivel próbálkoztál, és esetleg meg is tudjuk mondani, mi a hiba, ne nekünk kelljen már szenvedni és időt tölteni vele, hogy még ezt is összehozzuk.
Szerinted mit mondanak az autószervizben, ha azt mondod, hogy otthon van a kocsid, és nem működik, de nem tudod, miért, mondják már meg, hogy mi a baja?(#2940) SektorFlop : ugyanez vonatkozik rád is.
Oszd meg, hogy mivel próbálkoztál, mert különben nem fogunk tudni segíteni.
És ha témával kapcsolatos (van benne JS) a hsz.-ed, ne rakd OFF-ba. -
Sk8erPeter
nagyúr
válasz
Speeedfire #2937 üzenetére
Nem is rossz ötlet, és akkor ha a class-ben nagyobb a szélesség, akkor egyben megoldaná az .animate()-et is.
-
Sk8erPeter
nagyúr
Nézd meg a Fácsét IE8-ban például.
Ott pont úgy változik az URL, hogy hash-t használnak.Tehát valahogy így:
http://www.facebook.com/photo.php?fbid=1231231#!/photo.php?fbid=123123132&set=ASDADS&type=1&permPage=1A #!/photo.php?.... rész az érdekes.
Tehát van egy "fallback", ha nem támogatja ezt a feature-t a böngésző, amiről Athlon64+ beszélt.
-
Sk8erPeter
nagyúr
válasz
[pod]Diablo #2928 üzenetére
Ez az event akkor is érvényes, próbáld ki az általam korábban linkelt oldalon, egy megadott hash-sel, pl. ezzel:
http://benalman.com/code/projects/jquery-hashchange/examples/hashchange/#test4
Itt látható a #test4 hash a végén, és a 4. linket zöldre is színezi ennek a megnyitásakor. -
Sk8erPeter
nagyúr
válasz
Speeedfire #2924 üzenetére
"Csak trollkodni jövök ide."
Micsoda segítőkészség. -
Sk8erPeter
nagyúr
válasz
Speeedfire #2922 üzenetére
Valahogy sejtettem.
-
Sk8erPeter
nagyúr
válasz
[pod]Diablo #2917 üzenetére
A hash-t változtasd (# utáni rész az URL végén).
Csináld úgy, ahogy Ben Alman mutatja:
jQuery hashchange event=============================================
(#2920) Speeedfire : ezt ki is próbáltad?
-
Sk8erPeter
nagyúr
válasz
Speeedfire #2911 üzenetére
Sejtettem, csak kötekszem.
-
Sk8erPeter
nagyúr
válasz
Speeedfire #2909 üzenetére
Dehát mé', ő írta: "Ha valaki tud segíteni a problémámon, ne tartsa magában, mert este rosszakat fog álmodni!"
Akkor most mindig álmodjunk rosszakat, mert Te már elmondtad a megoldást?Na jó, befejeztem az OFF-olást, csak lovagoltam azon, amit írt.
-
Sk8erPeter
nagyúr
válasz
Speeedfire #2906 üzenetére
Megijedtél, hogy rosszakat fogsz álmodni?
Most akkor mindenki, aki magában tartotta és fogja tartani a megoldást, mert Te már elmondtad, rosszakat fog álmodni, amint elolvassa az előző hsz.-t? Neee! -
Sk8erPeter
nagyúr
válasz
Speeedfire #2900 üzenetére
Legyen csak ocsmány, mi?
-
Sk8erPeter
nagyúr
De akkor hogy szeretnéd megoldani a kérdés megerősítését/tagadását, ha nincs felugró valami? Valaminek mindenképp fel kell ugrania a kérdéssel.
Pl. így: jQuery UI Dialog - Modal confirmation
Nincs rá egysoros módszer.(#2897) Speeedfire :
"csicsa"?Sztem inkább nem olyan ocsmány, mint a hagyományos módszer.
-
Sk8erPeter
nagyúr
válasz
Speeedfire #2894 üzenetére
NEM.
Miért nem használsz valami tisztességes notifier és dialog plugint erre (jQuery UI Dialog, meg a sok-sok kifejezetten értesítésre, megerősítésre szolgáló alternatíva pl. jQuery-ben megírva), amilyenről már ötezerszer beszéltünk jQuery topicban is? -
Sk8erPeter
nagyúr
válasz
SektorFlop #2887 üzenetére
Így is lehet, de inkább ténylegesen stringként csapd hozzá az azonosítót, hogy mindig az elvárt eredményt kapd:
'user/user.php?insert=ok&azonosito='+<?php echo $azonosito;?>
HELYETT
'user/user.php?insert=ok&azonosito=<?php echo $azonosito;?>'
(magyarul PHP-vel fűzöd hozzá)Ennek a megoldásnak viszont hátránya, hogy nem szép, mert kevered a JavaScript-kódot a PHP-kóddal, ami szemantikai keveredés, alapvetően kerülendő. Itt már inkább egy JS-ben definiált változót kellene inkább hozzáfűznöd.
De ettől függetlenül nem csinálsz nagy butaságot ezzel a megoldással, max. kényelmetlen, de így is használható. -
Sk8erPeter
nagyúr
A különválasztásnál csak ilyesmire gondoltam (lehet másképp is; ez most plain JavaScript):
http://jsfiddle.net/Sk8erPeter/Hf9k2/
Itt az e.preventDefault(); akadályozza meg, hogy "továbbmenjen" a form feldolgozása.
Ha igennel válaszoltál a kérdésre, akkor simán csak el fog tűnni a gomb. -
Sk8erPeter
nagyúr
Akkor már inkább egy rendes formot hozz létre, és a form action attribútumában add meg a címet, ahova el akarod küldeni a feldolgozást; aztán a feldolgozó fájlból majd visszairányítod az eredetibe a továbbiakat (pl. kiírod, hogy oké, sikerült).
Leegyszerűsítve:
<form onsubmit="return confirm('Biztosan akarja?');" action="menj_erre_a_cimre/feldolgozas.php">
..........
</form>Persze úgy szép, ha nem onsubmitben van, hanem külön (vagy a form submit gombjára rakhatsz a tiédhez hasonlóan onclick-et; de ha ezt választod, azt is inkább külön kell szedni), meg lehet, hogy egyéb dolgokat is akarsz művelni, és akkor függvényt valóban létre kéne hozni. Főleg, ha a "nem" válasz esetén át akarod irányítani máshová. Így annyit fog csinálni, hogy a form elküldésekor "nem" válasz esetén semmit nem csinál, "igen" esetén továbbmegy az action attribútumban megadott címre.
-
Sk8erPeter
nagyúr
Ja hogy még mindig ez a jQuery Mobile-os téma. Amúgy nem értem, miért kell annyiszor elmondani a kérdezőknek, hogy vegyék már a fáradságot arra, hogy jsFiddle-re felpakolják a kódokat, miért mindig nekünk kell...
Igazából mindkét fél érdeke lenne, a segítő szándékú hozzászólónak időspórolás, a kérdezőnek meg gyorsabb megoldás (ez szintén időspórolás)... Lehet, hogy beíratom az 1. hsz.-be emlékeztetőként.
-
Sk8erPeter
nagyúr
"azt hogy tudom megcsinálni, hogy scriptből nyissak meg oldalt? mert ha pl megváltoztatom scriptből egy gomb href értéket, akkor az csak akkor nyitja meg a kívánt ablakot, ha rábökök."
Hogy kell elképzelni ezeket az "ablakokat"? Milyen ablakokról beszélsz, böngészőbeliekről, vagy egy modal dialog-szerű valamiről? -
Sk8erPeter
nagyúr
"második gondolatom az volt, hogy minden id-t hozzáadok egy stringhez, majd megnézem, hogy az aktuális elem id-je substringje-e, mert ha igen, akkor lehet összehasonlítani, de gondolom a substring fv is valami ciklussal működik, tehát elvileg az is kiesett."
Hát ez elég kemény, ettől a gondolatmenettől kicsit kirázott a hideg... de már az is meglep, hogy valakinek egyáltalán ilyen megoldás eszébe jut.Okádék megoldások közül is legokádékabb lenne.
Egyébként jó lenne tudni kicsit pontosabb infókat azonkívül, hogy localStorage-ből és szerverről kapott array-eket össze akarsz "fésülni": ha jól értem, localStorage-ben mondjuk valami számunkra ismeretlen régebbi adatok vannak dátummal, aztán jön a szerverről azonos id-vel egy másik dátummal valami másik, újabb adat (vagy fordítva, végül is mindegy). Az lenne a fontos, hogy mit szeretnél megtartani: mindkettőt, vagy "felülírható" valamelyik, és egyáltalán milyen formában szeretnéd tárolni mondjuk egy harmadik, "összefésült" tömbben. A feladat körülbelüli ismerete azért érdekes, hogy érdemi tanácsot tudjunk adni.
===========
(#2876) CSorBA : az igen hasznos tud lenni, amikor az ember kérdezés előtt inkább kipróbálja.
-
Sk8erPeter
nagyúr
Elmondanád, hogy mit művelsz itt a kódodban?
Miért nem kreálsz kapásból egy tömböt, és kész?
Pl.:var ezANagyonFaszaTombod = new Array();
ezANagyonFaszaTombod.push({id: 123, date: '2012-03-14'});
ezANagyonFaszaTombod.push({id: 321, date: '2012-02-11'});
ezANagyonFaszaTombod.push({id: 666, date: '1934-01-02'});Szerk.: ez tehát objektumok tömbje.
-
Sk8erPeter
nagyúr
Ja hogy így!
Ez volt a lényeg, hogy stringként adod át, erre kérdeztem rá.($.styled('.foo'))
Mondjuk nem mintha az 1 ms versus 5 ms különbséget túl sűrűn lehetne releváns különbségnek nevezni.
De mindenesetre azt bizonyítja az összes teszt, hogy abban az esetben igencsak megfontolandó a plugined használata, amennyiben RENGETEG elemről van szó, amit egyszerre kell módosítani.
Mondjuk a felrakott tesztedben egyértelműen érezhető, hogy a jQuery-s .css() módosítás mennyivel lassabb. Mármint számok ismerete nélkül érezhető.==================
(#2849) Karma :
ez kurva jó.Amúgy ez tényleg csak viccnek jó, mert az AJAX-os rész azért már igencsak sántít, mert a kód nem cross-browser megoldást mutat.
Na de nem kötekszem.
-
Sk8erPeter
nagyúr
Eggyel visszább az ábécében
: CKEditor
Ezt tudom ajánlani, elég komolyan testreszabható, és folyamatosan fejlesztik. (Az külön jó pont, hogy Drupalhoz is nagyon jó modulja van, ezenkívül ASP.NET-es kontrollert is kínálnak hozzá, meg Java-alkalmazásokba is könnyen integrálható, plusz ingyenesen (persze van liszenszelt változata is).)Meglepődve látom, hogy az ábécében eggyel később lévő CLEditor pl. nem mutatja azt sem, ha egy szót már korábban mondjuk félkövérítettél: ha a kurzor a félkövérített szó valamelyik betűjénél áll, akkor nem kerül fókusz a félkövérítés ikonra... ahogy a többi formázást sem mutatja. Pedig ez alapvető elvárás lehet egy WYSIWYG-szerkesztővel szemben. (CKEditor alap, hogy tudja.)
Ja, de most, a hsz. megírásának végére látom, hogy azt írtad, hogy legyen "lebutított".
Hát, a CKEditor mondjuk nem kicsi, de végül is úgyis csak egyszer kell a böngészőnek betöltenie a hozzá tartozó JS-fájlt, utána a böngésző már cache-ből szedi.
De ha a fentebb linkelt demóoldalon a "Custom toolbar" linkre kattintasz, akkor láthatod, milyen a CKEditor "Basic" toolbarja:Pont csak az alapvető eszközök láthatók rajta; ezt tetszőlegesen tudod bővíteni.
-
Sk8erPeter
nagyúr
Ez elég durva különbség....
Mondjuk azt nem értettem, miért úgy mérted az időt, hogy a kezdeti időnél new Date()-et használsz, a végénél meg Date.now()-t, akkor már legyen következetes.Mármint az alábbi résznél:
var start = new Date();
...
var end = Date.now();
Nem sok teteje van."Ezért hozzáadtam egy ilyen végrehajtási módot is."
Példa a használatra? -
Sk8erPeter
nagyúr
Semmi különös benchmarkra nem gondoltam.
Csak valami ilyesmire, ami milliszekundumokban mérve kijelzi a scriptek lefutása közötti különbséget:
var startTime, endTime, differenceInMilliseconds;
startTime = new Date();
for(var i = 0; i < 10000000; i++){
;
}
endTime = new Date();
differenceInMilliseconds = endTime - startTime;
console.log('difference in milliseconds:');
console.log(differenceInMilliseconds + ' ms');Itt a for ciklus helyére kerülne a Te kódod, így lehetne tesztelni a hagyományos jQuery-s és a styled pluginos lefutás közötti különbséget.
Egyébként most látom, MDN-en is van példa (csak már megírtam a fentit addigra):
MDN - Date// using static methods
var start = Date.now();
// the event you'd like to time goes here:
doSomethingForALongTime();
var end = Date.now();
var elapsed = end - start; // time in millisecondsMásik:
// if you have Date objects
var start = new Date();
// the event you'd like to time goes here:
doSomethingForALongTime();
var end = new Date();
var elapsed = end.getTime() - start.getTime(); // time in millisecondsLényegében ugyanaz, mint az enyém.
===========================================================
Egyébként érdekes, sokan nem hiszik el, hogy az Opera JavaScript-motorja márpedig igenis gyorsabb, mint a többi jelenlegi böngészőé. Ahogy azt sem hiszik el, hogy a Firefoxé lassú (ahogy lassú a Firefox általában).
Most lefuttattam egy tesztet a fenti, legelső kóddal a konzolból - tehát 10 millió lépéses for ciklus:Chrome 21.0.1180.83 m
Átlag: 9733 ms.
Firefox 14.01
Átlag: 20759 ms (!!!).
Opera 12.01 (x86)
Átlag: 2163 ms (!!!).
A Firefox tehát 3 mérés után átlagban 18596 ms-mal (!!!) lassabban végzett a feladattal, mint az Opera, Chrome pedig átlagban 7570 ms-mal hajtotta végre lassabban az Operánál; a Firefox 11026 ms-mal volt átlagban lassabb, mint a Chrome.
Az Opera tehát elég feltűnően nyert. Ezt a mérést még többször végrehajtottam, mindig hasonló eredményekkel zárult, legfeljebb 1-1,5 másodperc differencia volt az egyenként kijött eredmények között. A teszt idejére egyébként a legtöbb extensiont a böngészőkben letiltottam.
Számomra azért meglepő, hogy 10 millió lépésszámnál már ilyen szintű különbségek jönnek elő.
A Firefox GUI-ja egyébként a teszt idejére lényegében végig teljesen használhatatlan volt ("Not responding").A tesztgép pedig az adatlapomon is látható Lenovo Y570 (Intel Core i5 Mobile i5-2410M @ 2.30 GHz / 1066MHz / 3MB L2 - 2.9GHz Turbo Boost, Western Digital Scorpio Blue WD7500BPVT-24HXZT1, Intel HD 3000 / NVIDIA GeForce GT555M - 1GB GDDR5 VRAM, ...).
-
Sk8erPeter
nagyúr
Na, akkor összegezve, én állításom:
- címsorban mindenféle hash-ekkel szétokádott URL csúnya
- könyvjelzőzött, mindenféle hash-ekkel szétokádott URL csúnya
Persze, ha akármilyen módon át van írva, vagy bármilyen okból a felhasználó által jól látható URL már normálisan néz ki, akkor no para.
Szerintem már jól lerágtuk ezt a témát.Érdekesebb lehet a DOM CSS-sel kapcsolatos téma. Abban van tapasztalatod/olvastál róla, hogy mitől jobb, ténylegesen gyorsabb-e, stb.?
-
Sk8erPeter
nagyúr
Jó, hogy ilyen hosszan leírtad a dolgot, meg korábban már én is többféleképpen kifejtettem, aztán a "Fontosszerk.:" résznél végre rájöttél, miről beszéltem addig.
Lehet, hogy biztonsági szempontból egyenértékű (bár ez számomra nem feltétlenül egyértelmű, bár igen, adott esetben valóban "lehallgatható" a kommunikáció, ha valaki nagyon akarja, és akkor lehet, hogy mindegy, hogy URL-ben vagy headerben vagy cookie-ban vagy más ügyeskedéssel passzolod át az adatot; bár ha URL-lel passzolod, legalább megkönnyíted a dolgát), de felhasználói élmény tekintetében nagyon nem. Ha az URL össze van okádva egy baromi hosszú hash-sel, amikor böngészgetek, az szerintem nagyon zavaró, plusz az URL nem lesz könnyen megjegyezhető, mert az átlaguser nem biztos, hogy szét tudja választani a
http://example.com/foo/bar/test
címet ettől:
http://example.com/foo/bar/test?asd=jalskdjq34lkj321sadnlasdequwel&bla=123lknasdl678sadlokEzenkívül akkor a felhasználó ezt a hányadékot menti el a könyvjelzőkhöz is.
Szóval szerintem ha lehet, kerülendő a session id URL-ben történő passzolgatása. Jó, hát XHR-nél kb. le van szarva, mert abból a felhasználó többnyire lószart sem vesz észre, de a böngésző címsorába ne legyen beokádva ez a fenti rondaság.
Így már oké? -
Sk8erPeter
nagyúr
Hmm, hát valóban nincs extra fullos módszer, és vannak esetek, ahol nem is annyira gázos, ha átpasszolod a session id-t, mert esetleg szenzitív adatokhoz nem férsz hozzá, vagy nem tudod őket módosítani. Mondjuk a Graph API-nál elvileg a user engedélyét kell kérned, hogy bizonyos adatait megkapd. Nem nagyon használtam még a Facebookos API-t, de ezzel módosítani nem is nagyon tudsz szenzitív adatokat, nem? Mondjuk végül is az igaz, hogy publikálhatsz a falára baromságokat, ha megkaptad az engedélyt, és ha valaki ezt a tokent megszerzi, akkor rosszindulatból is teheti ezt egy alkalmazáson keresztül.
Egyébként igazából a kiindulási pont az volt, hogy van egy webalkalmazás, ahova közvetlenül bejelentkezik az illető, és böngészgeti az oldalt. Nincs közvetett, API-n keresztüli kommunikáció, mint az általad említett Facebookos példánál.
Itt szerintem nem indokolt passzolgatni az URL-be a session id-t. Ahogy nem teszi a Facebook, Gmail, Google Drive, Hotmail, stb. sem, amikor csak böngészgeted az oldalukat.
Nemde?A Liferay-t nem ismerem, fogalmam sincs, hogy működik, így a motivációt sem tudom, mi az oka, hogy az URL-ben van minden alkalommal belepakolódik a session id. Nyilván megvan az oka, nem tudom, mennyire "örökség", és azt sem tudom, ennél mennyire lenne ez egyébként más módon is megoldható. Meg a körülményeket sem írtad, hogy milyen esetben jön elő ez. Szerk.: vagy minden esetben?
-
Sk8erPeter
nagyúr
+ (#2794) Karma :
bocs, most látom, hogy erre elfelejtettem reagálni, pedig ez egy jó téma.
A DOM CSS gondolom azért lehet gyorsabb, mert a böngésző "natívhoz közeli" dolgait piszkálod, nem pakolsz köré egy library-t (mármint itt a jQuery-t). De mennyivel gyorsabb ez egyáltalán?
Végül is attól még, hogy ilyen módon használja az ember, a böngészőnek ugyanúgy frissítenie kell minden elemet, ha az adott selectorra 100'000 elem illeszkedik, akkor annyit.
v2izzy, tudnál esetleg valami benchmark-szerű mérést csinálni erről?Ha már így belementél a dologba...
Kíváncsi lennék, milyen különbségeket lehet mérni, érdekes lehet egy ilyen eredmény.
-
Sk8erPeter
nagyúr
Az URL-ben hol van a Fácsénál a session id vagy token?
Egyébként nem tudom, mennyire egyre gondolunk, én arra gondoltam, hogy sok webalkalmazásnál (pl. phpMyAdmin) az URL-ben passzolják át a tokent (pl.: index.php?token=a5f8269f1f04963c0cdc54fd174edc05), és erre alapoznak, de ez a token megszerezhető akár egy refererből is. Itt van még egy jó példa, hogy azért sem biztos, hogy jó, mert ha pl. könyvjelzőzöd az oldalt, és be vagy jelentkezve, a webalkalmazás pedig teljesen a GET-ben átadott tokenre alapoz, és ha más token van megadva, mint ami az aktuális, akkor mondjuk kidob a bejelentkező oldalra.
Amúgy most már elbizonytalanítottál, annyira nem vagyok biztos benne, de ha már így alakult, említhetnél konkrét példákat. -
Sk8erPeter
nagyúr
Hát akkor félreérthetően írtál.
(ld. futtatja az index.html, és kész, kliensoldalon legyen annak ellenőrzése, hogy valaki belépett-e, stb.)
"de hozzá kell fűzni, mert onnan tudja a szerver, hogy nem Betörő Pistike próbál adatok kérni, hanem Munkatárs Kamilla."
Hiába erősködsz, akkor sem szokás az URL-hez hozzáfűzni a session id-t. (Pontosítok: csak ELAVULT webalkalmazásoknál volt (remélem, a múlt idő indokolt) szokás.) Csak még könnyebbé teszed annak ellopását. Tökéletes módszer nincs, de ezzel még messzebb kerülsz a tökéletestől. -
Sk8erPeter
nagyúr
Kap session id-t, akkor gondolom csekkolod is a session id-t - tehát csak van szerveroldali kódolás (PHP, ASP.NET, JSF, stb.) a dologban, nem?
Vagy most nem tudod, hogy milyen rendszerben dolgozol?
"először belogol, kap egy session id-t, majd minden get-hez és post-hoz hozzáfűzi"
Ez rossz és felesleges. Ne legyen hozzáfűzve.Már nem is tudlak követni, hogyan oldod meg, hogy a böngésző bezárása után se jelentkeztesse ki a júzert. Cookie-kezelés van?
-
Sk8erPeter
nagyúr
válasz
Sk8erPeter #2811 üzenetére
"Meg mert felülről ez jött, hogy így csináljam (és akkor így kell)"
A megrendelőidnek, főnökeidnek a szerencsés kivételtől eltekintve k×rvára fingja nincs arról, hogy egy rosszindulatú támadás hogyan történhet. A fejlesztőnek attól még gondolnia kell a biztonságra, törekedni a rosszindulatú támadások elkerülésére.
Ez egyébként sem zárja ki azt, amit a megrendelőd kért, hogy a felhasználó maradjon bejelentkezve a böngésző bezárása után is (ami egyébként nem egy földtől elrugaszkodott gondolat)... tehát szerintem nem igazán értetted, mire akartunk kilyukadni.De az előbbi hozzászólásomban írtam egy példát, hogy hogyan írhatja át simán a júzer a kapott adatokat, abból talán érthető.
-
Sk8erPeter
nagyúr
Az érvelésed hibás, mert attól még, hogy mondjuk bejelentkezve marad a felhasználó, és nem csak addig, amíg a böngésző nyitva van (cookie), attól még szerveroldalon kell ellenőrizni azt, hogy a felhasználó be van-e jelentkezve, vagy sem, és attól függően megjeleníteni a bejelentkező felületet, vagy a bejelentkezés után látható tartalmat. Persze lehet ezt komplikálni úgy, hogy van egy "kerete" az oldalnak, ami mindig megjelenik, aztán AJAX-szal indítasz egy kérést a szerver felé, ami az érdemi tartalmat megjeleníti, és akkor így is-úgy is elmegy a szerver felé a kérés, és a szerver felől pedig aszerint dobod vissza a tartalmat (a bejelentkező ablakot vagy épp az "irányítópultot") - de ez a lényegen akkor sem változtat, hogy a szerveroldalon kell elvégezned annak az ellenőrzését, hogy be van-e jelentkezve.
Szerk.:
de hogy az eredeti kérdésre is válaszoljak, a betöltődés utánra simán betehetsz függvényt, ami csekkol egy állapotot, aztán küld egy AJAX-kérést.
jQuery-vel írom, ha már úgyis épp azt tanulgatod:$(document).ready(function(){
var idOfPageToLoad;
if(isLoggedIn()){
idOfPageToLoad = 1;
}
else{
idOfPageToLoad = 2;
}
loadPage(idOfPageToLoad);
});Ez a kliensoldali ellenőrzés a bejelentkezett állapotra totálisan megbízhatatlan, a felhasználó akkor módosítja itt az adatokat, amikor csak akarja.
Ha a felhasználó nincs bejelentkezve, de módosítja a lekért kódot kliensoldalon, és átírja a page id-t, akkor majd jól megmutatod neki azt az admin-felületet, amit elvileg csak a bejelentkezett felhasználóknak szabadna látni?==========
(#2809) Muton : látom az önbizalomban nincs hiány...
-
Sk8erPeter
nagyúr
Ezt a feladatot szerveroldalon kell elvégezni. Remélem nem kliensoldalon akarod leellenőrizni, az adott felhasználó be van-e jelentkezve...
(#2801) Muton : fogalmam sincs, soha nem használtam a jQM SimpleDialogot, az előbbit is csak a hivatalos doksi alapján mutattam. Mondjuk szerintem gáz a dokumentációja, mert elég gyér a demólapja. Összesen 3-féle demó? Az mi...
Nem igazán fejlesztettem még mobilra, de a jQuery UI Dialogja nem jó erre a platformra? Az sokkal jobban dokumentált, és egyszerű a használata.
De ha a SimpleDialoggal kell, én a helyedben rákeresnék, hátha vannak jóféle jsFiddle-demók róla, ami egyből elédtárja a megoldást. -
Sk8erPeter
nagyúr
http://dev.jtsage.com/jQM-SimpleDialog/demos/string.html
Ez alapján:
userid = $('#simplestring').attr('data-string');továbbírva a kódodat:
'OK': {
click: function () {
$('#simplestringout').text($('#simplestring').attr('data-string'));
// itt szeretnék értéket adni a userid-nek a textbox szövegével és meghívni a login(userid)
userid = $('#simplestring').attr('data-string');
login(userid);
}
},Szemléltetés kedvéért rákerestem, van már a témában jsfiddle-demó, ezt továbbírtam egy kicsit, és itt a végeredmény:
-
Sk8erPeter
nagyúr
Jaaa értem, tegnap nem esett le. Mondjuk abból, ahogy leírtad, nem is csoda.
Kösz, Karma.
Hogyan valósítottad meg, hogy a jövőben létrejövő elemekre is igaz legyen? Az .on()-nal, ahogy Karma említette? (most nincs időm átbogarászni a kódot, de kíváncsi vagyok)
Viszont így megint csak kérdés, hogy a .set()-nek ilyenkor mit kellene megvalósítania... az lenne a logikus ezek alapján, hogy akkor minden egyező selectorú elemre igaz lesz, hogy melyik fájlban van definiálva maga a stílus, az itt szerintem totál irreleváns. -
Sk8erPeter
nagyúr
"olyan előnye (persze ez valahol lehet hátrány is) van a jQuery-s .css()-el szembe, hogy ez azután is igaz az egyező selector-ú elemekre miután miután a művelet végrehajtódott."
Ezt nem értem. Miért, a .css() miért ne lenne igaz a "művelet" végrehajtása után? Milyen "műveletre" gondolsz?
Vegyünk egy példát, van egy ilyened:
<div class="alma">ASD</div>
Nyomatsz egy ilyet:
$('.alma').css('color', 'red');Ez ennek végrehajtása után is igaz lesz.... persze fogalmam nincs, mire gondolhattál...
-
Sk8erPeter
nagyúr
Ja igen, ezen a .set() metóduson akkor is meglepődtem egy kicsit, hogy hogyan is lenne ez implementálva. Hogyan állítanád át a stílusokat? A fájl módosításához már nyilván szerveroldali programozás is szükséges. Anélkül meg csak kliensoldalon lenne érvényes a dolog, aminek meg így első blikkre nem tudom, mi a konkrét haszna.
Egyébként a megvalósítás szempontjából nekem az tűnne logikusnak, hogy az épp kiválasztott fájlnál történjen meg a módosítás, a többiben ne matarásszon, mert az nem biztos, hogy a kívánt viselkedést eredményezné. -
Sk8erPeter
nagyúr
válasz
Sk8erPeter #2651 üzenetére
Mivel már más is megoldotta az applicationök, extensionök listájának megmutatását (nem is meglepő módon), ezért ez ajánlható: [link], tehát sztem nem fogok szarakodni a sajátom tökéletesítésével.
(nem mintha eddig túl sok energiát szántam volna rá)
Bár ez annyival kevesebbet tud, mint az enyém, hogy nincs keresőmezője, amivel szűkíteni lehet az applicationökre, illetve extensionökre. Meg nálam teljesen külön szekcióban vannak a letiltott, ill. engedélyezett applicationök, illetve extensionök.
Meg annyival is kevesebbet tud, mint az enyém, hogy az ikonnál elérhető popupban csak az alkalmazások listáját mutatja, az extensionöket nem, az enyémben meg letiltható már egyből a lenyíló menüből is az extension. Szóval ha valakit még érdekel, még megmutathatom az enyémet is, bár most került bele egy hiba, aminek az okát se időm, se kedvem nem volt kideríteni, de gondolom nem nagy szám kijavítani. -
Sk8erPeter
nagyúr
Ha megnézed az általad belinkelt oldalt, akkor az Overlays szekción belül van egy olyan, hogy "Question with buttons" - erre a felpattanó overlay-re kellene raknod a bejelentkező formot, AJAX-szal elküldeni az adatokat szerveroldalra (úgy, hogy adatküldés közben megjelenítesz egy töltődést jelző ikont), majd a választól függően eldönteni, hogy akkor bejelentkezett-e sikeresen, vagy sem. Aztán ennek megfelelően frissíteni a tartalmat. Így nem lenne szükség semmiféle átirányításra, és így lenne szép megoldás.
-
Sk8erPeter
nagyúr
Eleve nem értem a dolgot, kezdjük az elején.
Bejelentkezési kísérletnél átirányítod a feldolgozást a pages/sign_in_form.php fájlba, mert ezt adtad meg az action attribútumban.
Normális bejelentkeztetés így néz ki:1.) form ->
2.) submit gombot megnyomja a felhasználó ->
3.) átirányítás a feldolgozó fájlba (nálad ez a sign_in_form.php, ez OK) ->
4.) a feldolgozó fájlban a formban átadott adatok megvizsgálása, validálása ($_POST) ->
5.) ez alapján eldönteni, hogy bejelentkezett-e a felhasználó, vagy sem ->
6.) ha igen, megfelelő session-változókat beállítani, ha nem, akkor erre vonatkozó figyelmeztetést beállítani (akár ezt is lehet sessionnel persze) ->
7.) VISSZAIRÁNYÍTANI az eredeti oldalra, ahonnan a kérés érkezett, vagy sikeres bejelentkezés esetén ÁTIRÁNYÍTANI megadott oldalra (pl. ha egy oldal megtekintéséhez authentikáció szükséges, átirányítod innen a felhasználót a bejelentkező oldalra, beállítasz az URL-be egy destination=/innen/jött/a/kérés $_GET-paramétert, és sikeres bejelentkezés után erre az /innen/jött/a/kérés oldalra irányítod át; vagy ha a felhasználó eleve a bejelentkező oldalra érkezett közvetlenül, akkor sikeres bejelentkezés után átirányítod a kezdőlapra, vagy egy másik default oldalra).
Természetesen minden oldal elején ellenőrzöd, a felhasználó bejelentkezett-e már (pl. létezik-e adott session-változó; persze ahol abszolúte nem szükséges a bejelentkezett állapot, ott nem kötelező, de jellemző az, hogy már az elején eldöntöd, anonim vagy bejelentkezett felhasználóról van-e szó, minden oldalon).Nálad úgy látom, a visszairányítás/átirányítás lépés elmarad.
-
Sk8erPeter
nagyúr
-
Sk8erPeter
nagyúr
jQuery-vel halál egyszerű:
var list1 = {
a: 'asd',
b: 'bla',
c: {
id: 2,
date: '2012-07-26 15:05'
},
d: 'qweqweqw'
}, list2 = {
c: {
id: 666,
date: '1990-01-01 03:05'
},
d: 'újabb',
e: 'iwoeru',
f: 'lékdfgklj'
},
list3 = jQuery.extend(list1, list2);Chrome Developer Tools konzolon az eredmény:
-
Sk8erPeter
nagyúr
válasz
papa019 #2770 üzenetére
Mivel gondolom Te nem is deklaráltál és definiáltál allFields változót.
Itt menj rá a "View Source"-ra, ott láthatod, milyen kódot alkalmaz.
Még a függvények előtt így kezdi:var name = $( "#name" ),
email = $( "#email" ),
password = $( "#password" ),
allFields = $( [] ).add( name ).add( email ).add( password ),
tips = $( ".validateTips" ); -
Sk8erPeter
nagyúr
válasz
Sk8erPeter #2768 üzenetére
Rájöttem, hogy végül is az a böngésző (!) normális viselkedése, hogy megjegyzi a kitöltött formelemeket, mert tulajdonképpen alapból a dialógust csak eltünteted akkor, amikor bezárod, nem pedig törlöd, és létrehozod újra a következő megnyitáskor.
Ez korábban nem jutott eszembe, pedig a jQuery UI Dialog modal form példájában is látható, hogy a formelemeket "üríti" a bezáráskor:close: function() {
allFields.val( "" ).removeClass( "ui-state-error" );
}Az allFields-ben meg benne van a name, email, password mező is.
Ezt a kódot tehát felhasználhatod hasonló célokra. -
-
Sk8erPeter
nagyúr
válasz
papa019 #2765 üzenetére
Ja értem, tehát akkor egy jQuery UI Dialogot dobálsz fel, és ott maradnak meg a formelemek.
Akkor ezek szerint PHP-hoz nincs köze, azt hittem, arról van szó, de ezek szerint ÚJ kategória hozzáadására szolgáló formon jön elő a gond.Ha jól értem, akkor a kérdésed igazából már csak arra irányul, hogy miért mentődnek el a mezők, a többi megoldódott akkor, nem?
Ezt az elmentés-problémát minden böngészőben tapasztalod? Mert amúgy látszólag teljesen jól működik a kódod, amit belinkeltél. Vannak olyan extensionök/pluginek böngészőkhöz, amik elmentik az űrlap tartalmát, akár még az is beleszólhat... vagy ha van valami scripted az oldalon, ami ezért az elmentésért, visszaállításért felelős.
Nálad itt, a jsFiddle-ön is "elmenti" az értékeket? (Ezt a böngésző-kiegészítő esetleges megléte miatt kérdezem.) -
Sk8erPeter
nagyúr
válasz
papa019 #2763 üzenetére
"Arra gondolok, hogy amikor betöltöm az oldalam és elmentek egy formot, akkor amikor a következő alkalommal megnyitom ismét, akkor a korábban elmentett adatok megjelennek az input fieldekben, a megjelölt select elemek is ugyanazok."
Gondolom szerveroldalon kitölteted ismét. Akkor a szerveroldali kódot kellene módosítanod első körben, hogy üresen kapd meg a formot... vagy nem tudom, mire gondolsz, de alapvetően egy formnak teljesen üresnek kell lennie, hacsak ebbe valami nem szól bele, pl. az, hogy PHP-val kitöltöd előre. Bár egy elmentett formnál még jó, hogy szerkesztéskor így viselkedik...ahogy kell.Amiről beszéltél, arról tudsz feltenni valami példakódot jsFiddle-re szemléletetésként?
Főleg ezt a vörös színezetet nem vágom.....feltételezem, ez valami validációs kód miatt kerül köré, mivel üres lett a form adott fieldje....clear_form_elements(document.getElementById('add_category_form'));
Miért ragaszkodsz még mindig a plain JavaScripthez, ha jQuery-t használsz?clear_form_elements($('#add_category_form'));
Ha már...Magára a chosen plugin használatára is mutathatnál példát szintén jsFiddle-ön keresztül, hogy ne nekünk kerüljön időbe, hogy összeállítsunk egy demót.
-
Sk8erPeter
nagyúr
válasz
papa019 #2758 üzenetére
"És például valahogy úgy hívnám meg a függvényeket, hogy szam_fv.osszeadas(), stb.
Tudom, hogy ha létrehoznék egy class-t, akkor abba tudnék függvényeket tenni, de én csak szimpán a függvényeket szeretném csoportokba rendezni..."
Most megválaszoltad magadnak, akkor mi a kérdés?
Miért nem jó neked az osztály? Pont az kell neked.Egyszerű példa:
function Valami(){
this.elso = function(){
// ...........
}
this.masodik = function(arg){
// ...........
}
// ...........
}
var valami = new Valami();
valami.elso();
valami.masodik(1234); -
Sk8erPeter
nagyúr
Szívesen!
Innen érthető meg elég jól, mit is csinál a JSON.parse(), lényegében hasonló az eval()-hoz, csak az a nagy különbség, hogy a JSON.parse() nem engedi lefutni pl. az esetlegesen kártékony JavaScript-kódot. Az eval()-nak pedig épp ez a nagy veszélye, hogy rajta keresztül lefuthatnak a rosszindulatú kódok.
Idézet:
"To convert a JSON text into an object, you can use the eval() function. eval() invokes the JavaScript compiler. Since JSON is a proper subset of JavaScript, the compiler will correctly parse the text and produce an object structure. The text must be wrapped in parens to avoid tripping on an ambiguity in JavaScript's syntax.
var myObject = eval('(' + myJSONtext + ')');The eval function is very fast. However, it can compile and execute any JavaScript program, so there can be security issues. The use of eval is indicated when the source is trusted and competent. It is much safer to use a JSON parser. In web applications over XMLHttpRequest, communication is permitted only to the same origin that provide that page, so it is trusted. But it might not be competent. If the server is not rigorous in its JSON encoding, or if it does not scrupulously validate all of its inputs, then it could deliver invalid JSON text that could be carrying dangerous script. The eval function would execute the script, unleashing its malice.
To defend against this, a JSON parser should be used. A JSON parser will recognize only JSON text, rejecting all scripts. In browsers that provide native JSON support, JSON parsers are also much faster than eval. It is expected that native JSON support will be included in the next ECMAScript standard.
var myObject = JSON.parse(myJSONtext, reviver);" -
Sk8erPeter
nagyúr
"else ágon nem kell a new Array valahogy?"
Nem, mé' kéne?
Itt láthatsz példát a JSON.parse-ra:
var jsontext = '{"firstname":"Jesper","surname":"Aaberg","phone":["555-0100","555-0120"]}';
var contact = JSON.parse(jsontext);
document.write(contact.surname + ", " + contact.firstname);Jelen esetben objektum lett belőle, de lehet akár tömb is (Return Value: An object or array.), ha olyan a JSON string (és valid).
Működőképes ez így, ahogy írtad.
Bár szerintem felesleges a new Array() az if ágnál is, nyugodtan maradhatna az eredeti undefined érték is a változóban, az úgy még egyértelműbbé teszi a dolgot, hogy nincs beállítva.
Persze megközelítés kérdése.De ha szabad, azt javaslom, kerüld az ilyen változóneveket, mint az str, array és hasonlók, mert igaz, hogy a típus a névből kikövetkeztethető, de az nem, hogy konkrétan milyen adat lesz ott majd. Persze ha ezt csak példaként írtad, és a kódjaidban beszédesebb neveket használsz, akkor nem szóltam.
-
Sk8erPeter
nagyúr
Nem kell felfedezni a spanyolviaszt.
concat() methodTehát
a.concat(str);
VAGY
str.concat(a);Ez visszatér az összefűzött stringgel.
-
Sk8erPeter
nagyúr
válasz
sztanozs #2747 üzenetére
Az első mondattal teljesen egyetértek. A másodikat viszont nem igazán látom be, miért számít: "globális" scope-ban lévő változót módosít a függvénnyel, tehát ugyanúgy megváltozik, itt tök mindegy, hogy referencia típusú vagy sem, nem függvényparaméterként adta át.
======
(#2746) Muton :
működik abban a formában, ahogy mutattad.
De nem jó gyakorlat ilyen módon módosítgatni a változók értékét, inkább tényleg valami függvény térjen vissza azzal az értékkel, amire változtatni szeretnéd, ahogy sztanozs is említette. -
Sk8erPeter
nagyúr
válasz
SureStudio #2742 üzenetére
-
Sk8erPeter
nagyúr
válasz
SureStudio #2740 üzenetére
Az se mindegy, milyen nyelven akarod mindezt...
Mindenesetre első körben pl.: Nagy Gusztáv: Webprogramozás alapismeretek. -
Sk8erPeter
nagyúr
válasz
SureStudio #2738 üzenetére
Milyen "dolgokat"?
-
Sk8erPeter
nagyúr
válasz
SureStudio #2736 üzenetére
Nem para, előfordul. Ez tényleg szerveroldali probléma.
-
Sk8erPeter
nagyúr
válasz
SureStudio #2733 üzenetére
Értem, hát ezzel az információmennyiséggel itt senki nem fog tudni mit kezdeni, úgyhogy vagy elkezdünk értelmesen kommunikálni a problémáról, vagy akkor marad ennyiben.
(#2734) trisztan94 : szívesen!
-
Sk8erPeter
nagyúr
válasz
trisztan94 #2730 üzenetére
Még korábban csináltam egy demót formelemek klónozásáról, itt meg tudod tekinteni:
http://jsfiddle.net/Sk8erPeter/RqYYj/Ezt ajánlom még:
SheepIt! Plugin - Dynamic form cloning with Jquery
Elég ígéretesnek tűnik. -
Sk8erPeter
nagyúr
válasz
SureStudio #2729 üzenetére
Ennek semmi köze nincs a JavaScripthez. A JavaScriptet elsősorban kliensoldali nyelvként használják, a böngésző támogatja. Amit Te szeretnél, az kifejezetten szerveroldali nyelvvel megoldható (pl. PHP). Viszont konkrét receptet senk nem fog elédtolni, mivel senki nem ismeri a saját rendszeredet.
-
Sk8erPeter
nagyúr
válasz
trisztan94 #2727 üzenetére
Szívesen!
-
Sk8erPeter
nagyúr
válasz
Sk8erPeter #2725 üzenetére
IE8-ban is próbáltam, ott is jól működik.
Ja, és a fenti kód alkalmazása:
$(document).ready(function() {
$('.blink').blink(); // default is 500ms blink interval.
$('.blink_second').blink({
delay: 100
}); // causes a 100ms blink interval.
$('.blink_third').blink({
delay: 1500
}); // causes a 1500ms blink interval.
}); -
Sk8erPeter
nagyúr
válasz
trisztan94 #2724 üzenetére
Ez működik, kb. 2 percet vett el:
http://jsfiddle.net/Sk8erPeter/Yca4Z/Innen: jQuery Blink Plugin
A kódja igazából ennyi:
(function($)
{
$.fn.blink = function(options)
{
var defaults = { delay:500 };
var options = $.extend(defaults, options);
return this.each(function()
{
var obj = $(this);
setInterval(function()
{
if($(obj).css("visibility") == "visible")
{
$(obj).css('visibility','hidden');
}
else
{
$(obj).css('visibility','visible');
}
}, options.delay);
});
}
}(jQuery)) -
Sk8erPeter
nagyúr
-
Sk8erPeter
nagyúr
jQuery-vel pl. így:
http://jsfiddle.net/Sk8erPeter/JVpGv/
$(document).ready(function() {
var soapResponse =
'<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">'+
' <S:Body>'+
' <ns2:loginResponse xmlns:ns2="http://webservice...">'+
' <return>'+
' <sessionid>40e5bcfc</sessionid>'+
' <userid>0bc01f9a</userid>'+
' <versioning>'+
' <modulrev>1a</modulrev>'+
' </versioning>'+
' </return>'+
' </ns2:loginResponse>'+
' </S:Body>'+
'</S:Envelope>'+
'';
var $loginResponseData =
$(soapResponse)
.find("S\\:Body")
.find("ns2\\:loginResponse");
var sessionid =
$loginResponseData
.find("sessionid")
.text();
var userid =
$loginResponseData
.find("userid")
.text();
$('#userid').text(userid);
$('#sessionid').text(sessionid);
alert('User id: "'+userid+'"\n'+'Session id: "'+sessionid+'"\n');
});Persze ez csak egy példa, lehet, hogy szebben is megkapható azzal, amit használsz.
Szerk.: itt átírtam soapResponse-ra az xml változónevet, hogy egyértelműbb legyen.
-
Sk8erPeter
nagyúr
válasz
trisztan94 #2707 üzenetére
Szívesen!
Na, végre egy jó hír itt PH!-n! -
Sk8erPeter
nagyúr
válasz
papa019 #2704 üzenetére
Nyilván nem is kell plusz lekérdezés, annyi adatot pakolhatsz bele objektumba, amennyit nem szégyellsz.
De mire jó ez, hogy fordítva íratod ki??Miért nem eleve az elvárt sorrendben érkezik szerveroldalról? Az ilyen nyakatekert kódoknak csak a kárát fogod látni a későbbiekben (ha még nem tapasztaltad, majd úgyis rájössz, tényleg).
A kódodban sehol nem látom, hogy kigyűjtenéd azokat az adatokat, amelyekre neked tényleg szükséged van majd a térkép megjelenítéséhez, és az sem volt világos, hogy végül is milyen adatot szeretnél, hogy elérjen a Google Maps API pluszban. -
Sk8erPeter
nagyúr
válasz
trisztan94 #2701 üzenetére
Gondolom valami ilyesmire gondolsz:
http://jsfiddle.net/Sk8erPeter/KE8LS/Lehet, hogy lehetne még gyönyörűzni, de jelenlegi agyi állapotomban, félhullaként erre futotta.
-
Sk8erPeter
nagyúr
válasz
trisztan94 #2699 üzenetére
Szívesen, kérdezz, ha valami nem tiszta!
-
Sk8erPeter
nagyúr
válasz
trisztan94 #2697 üzenetére
Teljesen egyetértek az ott hozzászólóval, iszonyat ocsmány lenne sima JavaScriptben egy AJAX-hívás, felesleges ezzel szívatnod magad, amikor ilyen jó library-k vannak, mint a jQuery és a többi hasonló. Persze ha nagyon szorgalmas vagy, akkor felfedezheted a spanyolviaszt.
Amúgy ezelőtt én is írtam neked egy választ, arra még nem reagáltál.
-
Sk8erPeter
nagyúr
válasz
trisztan94 #2695 üzenetére
Szerintem a File Style Plugin for jQuery-ből meríthetnél ötletet, ez egy külön szövegdobozt hoz létre a tallózott fájl elérési útjának megmutatására.
Korábban készítettem róla egy demót jsFiddle-re, itt ha megnyomod a gombot, akkor átvált az új stílusra:
http://jsfiddle.net/Sk8erPeter/JEVgF/Szerk.:
egyébként itt a pluginben igazából ennyi a "nagy" trükk, ha ezt megnézed:var filename = $('<input class="file">')
.addClass($(self).attr("class"))
.css({
"display": "inline",
"width": settings.width + "px"
});
// .........
$(self).bind("change", function() {
filename.val($(self).val());
});(A kipontozott résznél van még egy-két dolog.)
Így tehát amikor kiválasztod a fájlt, akkor a filename nevű inputelem (ami egy textfield) értéke megváltozik a fájl elérési útjára.
Itt a "self" az a fájltallózó inputelem lesz, amire beállítod a File Style Plugint.
Persze ahhoz, hogy ezt jobban értsd, valamennyire a jQuery alapjaival tisztában kell lenni.
Ha ez megvan, onnantól elég könnyű megoldani a feladatodat. -
Sk8erPeter
nagyúr
Szerintem túlbonyolítod a kódot. Ezenkívül remélem azt tudod, hogy a kliensoldali korlátozás nem sokat ér, szerveroldalon kell korlátozni az ilyesmit ahhoz, hogy hatása is legyen (pl. PHP-vel), a JavaScript kikapcsolható, megkerülhető, stb.
A FromField, ToField nálad mire használatos?Röviden elmondom, szerintem mi lenne az egyszerűbb és korlátozás szempontjából is egy fokkal jobb megoldás (attól is függ, mennyire megy a JavaScript, meg a szerveroldali kódolás):
1.) indítasz egy sessiont szerveroldalon (PHP: session_start() ), kezdetben beállítod 0-ra az eddigi letöltések (gondolom ezt akarod korlátozni) számát (pl. PHP: $_SESSION['nr_of_downloads'] = 0;)
2.) a mentésre való klikkeléskor AJAX-szal küldesz egy egyszerű lekérést a szerver felé, lekérdezed, letölthet-e még a felhasználó (nem lépte-e át a 20-as korlátot) (pl. PHP: if($_SESSION['nr_of_downloads'] < 20)
3.) - ha igen, akkor elindíthatod a letöltést, és megnöveled eggyel ($_SESSION['nr_of_downloads']++;)
- ha nem, feldobod neki a figyelmeztető ablakot akár alert()-tel kliensoldalon -
Sk8erPeter
nagyúr
válasz
trisztan94 #2665 üzenetére
Ajjaj, akkor rohanok.
Szívesen!
-
Sk8erPeter
nagyúr
válasz
trisztan94 #2663 üzenetére
Itt is vannak egyediek, választhatnál hasonlót:
Google Web FontsKönnyű beüzemelni is.
-
Sk8erPeter
nagyúr
-
Sk8erPeter
nagyúr
válasz
spammer #2645 üzenetére
nincs mit!
Most még a kis extensiont kiegészítem azzal, hogy megmutatja a letiltott kiegészítőket is, és kattintásra azt is lehet engedélyezni. Így még lesz is valami értelme.Ergo így a kis ikonjára kattintva tudod engedélyezni/letiltani az extensiont, meg elindítani egy alkalmazást (lásd pl. ilyen alkalmazás az Angry Birds
), meg keresgélni is lehet köztük a kis mezővel.
Csak nem nagyon van időm, de majd ha kész, szólok. Nem olyan nagy szám amúgy, de mondjuk hasznos lehet, legalább csak amiatt, hogy hogyan lehet hozzáférni ehhez a részhez (chrome.management). -
Sk8erPeter
nagyúr
válasz
[pod]Diablo #2649 üzenetére
fordfairlane-nek nem reagáltál, pedig ő leírta az egész lényegét.
Ha nem akarsz újratöltést, akkor változtasd a hashmark utáni részt.
Ajánlom a jQuery hashchange event plugint. -
Sk8erPeter
nagyúr
Na, kipróbáltam, használtam a chrome.management API-t, és bár hozzá lehet nyúlni az extensionökhöz úgy, hogy ezen a kiegészítőn keresztül letiltod, de a default ikont sajnos nem lehet megváltoztatni.
Viszont egyébként tök jól ki lehet listázni az összes extensiont, applicationt is (ami a default új lapon látszik, ha jobbra lapoztok), keresgélni lehet köztük, stb., szóval ez egész hasznos.
A példaoldalon található App Launcher extensiont továbbfejlesztettem egy kicsit, és így különválasztva ki lehet listázni ezeket, meg lehet keresgélni, és ha az extensionre kattintasz, akkor feljön egy confirm ablak, hogy valóban le akarod-e tiltani az adott extensiont, ha leokézod, akkor le is tiltja. Így tehát a popup ablakban is meg lehet csinálni ezeket a műveleteket.
Ha gondoljátok, és érdekel Titeket ez az extension, akkor megosztom, szóljatok, ha kő'.Egy szó, mint száz: sajnos a jogos gyanú beigazolódott, hogy extension ikonját megváltoztatni valóban csak egymásnak történő üzenetküldözgetésekkel lehet.
Gondolom így akarták elkerülni, hogy az extensionök túlságosan bele tudjanak kotorni egymás dolgaiba.
Új hozzászólás Aktív témák
Hirdetés
- Külső 3,5'' mobil rack-ek topikja
- f(x)=exp(x): A laposföld elmebaj: Vissza a jövőbe!
- Kezdő fotósok digitális fényképei
- sziku69: Szólánc.
- sziku69: Fűzzük össze a szavakat :)
- Opel topik
- Milyen légkondit a lakásba?
- Új, belépő szintű Radeont kapnak az OEM-ek
- Luck Dragon: Asszociációs játék. :)
- Azonnali fáradt gőzös kérdések órája
- További aktív témák...
- Naim Mu-so 2 Vezetéknélküli all-in-one hi-fi rendszer
- Új/Bontatlan/Garis Google Pixel 9 Peony
- R7 9800X3D/XFX 7900GRE/2x16GB DDR5 6000Mhz/2TB NVMe SSD
- Szép állapot!! Hátlapon kisebb kopások!!! Samsung Galaxy S20 FE SM-G780G/DS - világoskék
- MacBook Air M1 / 2020 / Ezüst / 13" / 256 GB / 8 GB / DOBOZ / GYÁRI TARTOZÉKOK /
- HIBÁTLAN iPhone 14 Pro 256GB Deep Purple -1 ÉV GARANCIA - Kártyafüggetlen, MS3014, 91% Akkumulátor
- HIBÁTLAN iPhone 13 mini 128GB Pink -1 ÉV GARANCIA - Kártyafüggetlen, MS3087
- ÁRCSÖKKENTÉS Menő retró konfig: Q9550, Gigabyte P43, 4GB RAM, ASUS GT730
- Bomba ár! Lenovo ThinkPad T470 - i5-G6 I 8GB I 256GB SSD I 14" FHD I HDMI I Cam I W10 I Garancia!
- Medion Erazer Beast X40-hez vízhűtés (MD 60961)
Állásajánlatok
Cég: FOTC
Város: Budapest