Nem. Két okból: egyfelől honnan tudnánk, hogy 1 másodperc, több, mennyi? Másfelől, a böngészőben a JS egy szálon fut. Szigorúan tilos megvárakoztatni, mert akkor nem reagál a felhasználóra. Éppen ezért nincs is olyan a JS-ben, amivel tudnál várakozni (van egy időzítő, de az is visszahívással operál, tehát semmivel nem vagy előrébb, sőt, mint a korrekt módon).
Jobb ehhez hozzászokni már a kezdet kezdetén, mert ahogy mondtam, minden így megy a JS-ben; úgysem lehet kikerülni.
1. lépés
2. lépés
3. lépés: visszahívás = (
4. lépés
5. lépés
6. lépés: visszahívás = (
7. lépés
8. lépés
9. lépés
)
)
Mindened alapvetően ilyen lesz, sőt, még ilyenebb, mert közben a hibalehetőségeket is le kell kezelned, hogy mi van, ha valamelyik lépés nem sikerült...
Egyébként, amibe ilyenkor bele szoktál futni, az a JS aszinkron működése. Ez néha jól jön, néha kifejezetten kellemetlen, de akárhogy is van, a JS ilyen, ezt számításba kell venni. Ha veszel egy ilyen elvi utasítássort:
1. csinálunk egy képet
2. beleolvasunk valamit
3. lekérdezzük a méretét
4. csinálunk vele valamit
az nem fog működni. Ugyanis a 2. elmegy valahova a háttérbe beolvasni, de te rögtön továbblépsz a harmadikra, és amikor lekérdezed a méretét, az a kép még messze nem olvasódott be, tehát nem fogsz érvényes értéket kapni vissza. A JS-ben minden ilyesmit így kell megoldani:
1. csinálunk egy képet
2. megkérjük, hogy olvassa be.
2a. megmondjuk, hogy majd ha beolvasta, hol szóljon vissza, hogy értesítsen az eredményről
3. egyébként továbbmehetünk, és csinálhatunk mást, de nem függhetünk a 2a eredményétől
Ha például úgy kell továbbmenned, hogy igenis szükséged van a beolvasás eredményére, akkor nincs 3. pont. Akkor a 2a-ban kell felhasználnod az eredményt, és ott menni tovább annak ismeretében.
Nem, nem lehet. És végig a böngészőben levő méreteket kérdezgeted, nem a kép tényleges méretét (ha arra van szükséged), tehát ez így, ahogy van, nem is fog menni soha.
És újfent elmondom, amit már annyiszor: szerintem, aki kezdő JS-ben, az is csak jQuery-vel próbálkozzon. Régóta nincs már semmi értelme a nyers JS dolgaival bajmolódni.
Megint elakadtam.Így már működik FF alatt.Viszont Google Crome ban a működése kiszámíthatatlan. Mivel ez a funkció többször futhat egymás után,kiszámíthatatlanul a Crome-ban az utolsó két sor időnként 0-át ad. IE10 alatt ki sem tudom próbálni, az meg a window.open.... re allergiás. Most olvasok,olvasok,olvasok...(és anyázok!) Köszönettel m_kovacs
function popuponclick(param1) // a param1 a kép URL-je { var param=param1; var newImg = document.createElement('img'); newImg.setAttribute('id', 'kep'); newImg.setAttribute('src',param ); if (!document.getElementById('kep')) document.body.appendChild(newImg) ; else { var element = document.getElementById("kep"); element.parentNode.removeChild(element); document.body.appendChild(newImg) ; } var kep_width=document.getElementById("kep").width ; var kep_height=document.getElementById("kep").height ;
Megint elakadtam. Kérdés:lehet e egyáltalán javascript-ben lekérdezni egy,még be nem töltött kép méreteit?
Igy próbálkoztam: (részlet)
function popuponclick(param1) // a param1 a kép URL-je { var param=param1; var newImg = document.createElement('img'); newImg.setAttribute('id', 'kep'); newImg.setAttribute('src',param ); alert(param); alert(newImg.id); alert(newImg.src) ; var kep_width=document.getElementById('kep').width ;
Sajnos az utolsó sorra nyelvet öltött, s ezt üzente: "document.getElementById(...) is null"
ujra kell mond a $('#sortable') -n, hogy .sortable(...) Amugy pedig, ha egy select-ort tobbszor is hasznalsz, akkor mindenkepp rakd ki 1 valtozoba, vagy hivd lancolva, aho lehet, tehat ne kelljen tobbszor megkeresnie a dom-ban. var sortTable = $('#sortable');sortTable .append(...)..., hasonloan az info -ra, bar ebben az esetben tudod lancoltan hivni az egeszet.
Help! Van egy ul, ami jQuery UI sortable. Ehhez append-del hozzá fűzök egy új li elemet. Ez megtörténik, meg is jelenik, de ekkor triggerelni kellene a sortable-t, hogy rögzítse az új elem pozícióját. Ez nem megy.
A kódom:
function addQu( quID ){ $.post('kerdes-lista.php', { todo: 'add', qnid: 2, quid: quID }, function (data){ var json = $.parseJSON(data); $('#sortable').append($(json.newQu).hide().fadeIn(250)); // ez fűzi az új li elemet az ul-hez, OK $('#info').html( json.stat ); $('#info').fadeIn(100).delay(1400).fadeOut(1000); // ez megjeleníti, hogy siker van $('#sortable').trigger('stop'); // ez nem megy $('#moreQu').trigger('click'); // ez OK }); };
A stop helyén járt már receive és update is, de nem működnek. Ha magát a sortable-t rendezem kézzel, rendben működik és az új elem helyét is elküldi a szervernek MySQL-be mentésre.
Rengeteget gugliztam, de nem találtam megoldást. Van, ahol azt írják, hogy a update-nek és a sortstopnak működnie kellene (pedig a widget API-jában nincs is sortstop esemény), van ahol azt, hogy ezt nem lehet triggelni.
Onloadra futtasd le az ablak méretének lekérdezését, majd ezt tedd el egy változóba, aztán ha kell a kép, akkor ezzel a változóval állítod be, hogy mekkora felbontás meg miegyéb kell. Biztos ami biztos, onresize-ra is ráteheted ezt az eseménylezelőt. Vagy egy kicsit bonyolultabbat, mivel a már meglévő képeket is nagy valószínűséggel újra kell majd töltened.
"a PHP függvény második paramétere egy javascript függvény return értéke"
Nem.
Előbb a PHP fut a szerveren, aztán a JS a kliensen. De még ha valahogy behajtasz PHP alá egy JS futtató környezetet, azzal se fog menni pár dolog. Például a screen dolgai. Szóval ezt gondold újra.
Hátha tudtok segíteni: Meg lehet valósítani Javascript+AJAX-al egy olyan működést, hogy egy weboldal a szöveg (+ esetleg szöveg közbeni kép) tartalmát pl egy txt file-ból, (nem muszáj .txt-nek lennie, de talán ez a legkézenfekvőbb) vagy egy WYSIWYG editorral szerkesztett html-ből töltse be? A lényeg az lenne, hogy egyszerű módon a weboldal gazdája tudja módosítani a weboldal információit/tartalmát. Mivel már adott egy HTML+CSS+JQuery plugin-ekkel teletűzdelt, kialakult megjelenéssel, 'design'-al rendelkező oldal, így jó lenne ha nem kellene teljesen átszabni pl PHP-s alapokra.
És ha ez megoldható, akkor az AJAX avagy HTML környékén mégis merre induljak el, melyik téma foglalkozik az ilyen file kezeléssel? Ahogy nézegettem példákat azt találtam, hogy létezik valami FileAPI a legújabb html leírásban. (ami pl itt található: [link]) és részben ezzel oldják meg a filekezelést. Arra sajnos nincs most idő, hogy hosszasan belemélyedjek az AJAX rejtelmeibe (bár tudom ezt kellene) ezért is próbáltam elsőre, hogy kész példakódokat nézegetek-elemzek, ám nem találtam pontosan ilyen megvalósítást még.