Hirdetés

Keresés

Új hozzászólás Aktív témák

  • Bici
    félisten

    Ezt a hibát futásidőben kapod? Mert itt inkább arra tudok gondolni, hogy a tablazat változóban nem létezik az adott key-hez tartozó tömb, amin meg akarnád hívni a push metódust.

    Igen, és igazad is van. :K

    Meg is oldódott azzal, hogy rácsekkoltam, hogy az adott tablazat[key] undefined-e, és ha igen, akkor kapott egy kezdeti üres tömb értéket.

    if (tablazat[key] == undefined) tablazat[key] = [];

    Ha netán létezik elegánsabb megoldás, akkor szívesen fogadom. :U

    Köszönöm szépen! :R

  • Bici
    félisten

    Sziasztok!

    Tudom, hogy ide OFF, de nincs jobb topik.
    Typescript-tal szenvedek.

    Egy táblázat elemeit szeretném eltenni valamilyen adatstrukturába úgy, hogy minden oszlopnak van neve.
    Eddig ez nem is gond, de nem tudom előre, hogy az oszlopoknak mik lesznek a nevei.

    A TS meg előre kérné, hogy a table.columnName deklarálva legyen.

    Próbálkoztam egy olyannal, ami associative array névre hallgat, de az mindtha nem akarná key-t bevenni string változóból, csak kiírva, hogy 'oszlopnév'. :O

    let tablazat: {[key: string]: string[] } = {};
    ...
    fut a kod, a key és a cellastring változó kap értéket
    ...
    tablazat[key].push(cellastring);

    Es itt a tablazat[key]-re dob egy ilyet:

    TypeError: Cannot read properties of undefined (reading 'push')

  • Bici
    félisten

    Mivel void, azaz nincs a függvénynek visszaadott értéke, amivel utána tovább dolgoznánk, igaza lehet a VSCode-nak, hogy valóban kár awaitelni.

    Na, megoldódott.

    Nem a void a gond, hiszen a semmit is visszaadja, ha await-elsz rá.
    Egy ostoba typo volt a gond a meghívott fv-ben. :DDD

    Már minden jó.

    Azért köszi a támogatást, és sorry a vaklármáért! :R

  • Bici
    félisten

    Kellhet az await, gyanítom nem async kódban hívod és inkább ez lesz a baj, de konkrét kód nélkül ez csak színtiszta találgatás.

    async fv1() {
    await akármi();
    }

    async fv2() {
    await fv1();
    }

    Ezt látom a vscoda-ban; az aláhúzott rész alápontozva van, és mondja, h oda nem kell async.
    De amikor a fv1 fölé viszem az egeret, akkor azt írja, h "Promise<void>" a típusa.

  • Bici
    félisten

    Sziasztok!

    VSCode-ot használok, és egy függvényt hívok meg async fv-ből, await-tel.
    A meghívott függvénynek a VSCode szerint is Promise<void> a visszatérési típusa, de mégis alápöttyözi az await szót, hogy szerinte erre nincs szükség.

    Ha Promise, akkor miért nem kell az await?

    Kössz! :R

  • Bici
    félisten

    Végül a Katalon Recorder (Selenium IDE) lett a megoldás. Igen, kellett kicsit szenvedni vele, hogy változnak a gombok nevei, de végül sikerült. A csv-t pedig fel lehet tölteni egy "Data driven" fülön belül, onnan berakosgatja.

    Egyetlen probléma, hogy kicsit lassabb, mert max sebességen nem tudom futtatni, mert ugye mentés után kell egy 0.5s meg amíg a mentés gomb kattinthatóvá válik, így kb 10 mp felvinni 1-et.

    Ááá, ha van ilyen csv feltöltési lehetőség, akkor az más.
    Király, hogy megoldódott. :C

  • Bici
    félisten

    Ez nem js lesz, hanem valamilyen programnyelvvel automatizald a folyamatot. Pl. Selenium.

    A selenium nem tud natív alkalmazást vezérelni.
    Vagyis az excelt fel kell elötte tölteni pl. google drive-ra, onnan már elérhető a selenium számára is.
    Ebben az lesz a nehéz, hogy nem biztos, hogy a gugli felületén egyértelműen címezhető minden UI elem, így xpath alapján kell majd szenvedni, ami nem mindig hatékony.

    Én ezt az egészet úgy csinálnám, hogy megfejtem a feltötő API-t és írok rá egy JS scriptet pl. nodejs-sel, ami egy csv-ből vagy akár txt-ből kiszedni az adatokat.

  • Bici
    félisten

    Sziasztok!

    Egy objektum kulonbozo elemeit szeretnem konnyen ertheto formaban valtozoba menteni, hogy azzal lehessen rajuk hivatkozni.

    pl.

    eletkor: Objektum.Adatok.Felhasznalok.Bela.Eletkor,
    nev: Objektum.Katalogus.Szokek.Nagymelluek.Nev,
    magassag: Objektum.Lista.Fiuk.Gyula.Magassag

    Az Objektum sokfele lehet, es nehez megjegyezni, hogy melyik fajtaban hol talalhato a kert adat, emiatt akarom egyszerusiteni.

    Ha egy fuggvennyel olvasom ki, akkor mar a fv. elso lefutasanak idejeben kell lenni egy Objektumnak, de ez nem biztositott, sot a futas kozben folyton valtozik ez az objektum, vagyis sok fele jon letre belole.

    JSON-nel nem tudtam megoldani, hogy az idezojelben levo kifejezes az objektum belsejere vonatkozzon.

    Mi erre a bevett szokas?

  • Bici
    félisten

    Sziasztok!

    Egy valtozoba szeretnek belerakni egy olyan stringet, ami tartalmaz " es ' karaktereket is.

    Mi ennek a modja?

    Kossz!

  • Bici
    félisten

    "A rendező kód akor futna le, amikor az összes kép betöltődött, ezáltal tudjuk már a dimenzióit."
    Ezen elgondolkoztam, hogy biztos ez a jó megoldás? Miért nem küldöd ki első körben a képek dimenzióit, url-jét, majd azt beillesztve a megfelelő helyekre, szépen lejönnének a képek, mindegyik pont a helyére.

    Mert nincsenek meg előre a képek. A gépről feltöltött képeket kell rendeznem méret szerint.
    Tudtommal az onLoad lefutása elött nem tudom kiolvasni a méretüket.

  • Bici
    félisten

    Szia, kevéssé világos ennyiből, hogy pontosan mit szeretnél elérni, de használhatsz egy modulra/függvényre globális jelölőt (flaget) amit akkor billentesz át, ha minden betöltődött.

    Egy másik megközelítés, vagy a fenti megközelítés kiterjesztése, ha reaktívan gondolkozol. Ez nagyjából azt jelentené, hogy akik/amik érdekeltek az összes kép betöltődésében, azok beregisztrálnak egy callbacket például az "összes kép betöltődött" eseményre. Ebben az a jó, hogy az a modul amelyik a betöltést végzi csak gyengén lesz csatolva azokhoz amelyek a betöltődést figyelik.

    Vagy használhatod az "alap" megoldást, és callbackeket hívsz meg ha az összes kép betöltődött.

    Ezeket itt szemléltetem. http://jsfiddle.net/ygvvs0sm/

    Egyiket sem próbáltam ki, így kezeld őket pseudokódokként. üdv

    Köszi!

    Amit szeretnék, az a következő:
    Van X darab kép. Ezeket szeretném a méretük szerint elrendezni.
    A rendező kód akor futna le, amikor az összes kép betöltődött, ezáltal tudjuk már a dimenzióit.

    Utána nézek a callback-es megoldásnak és a flag-nek is.
    Viszont a flag-es megoldás miben különbözik attól, amit én csináltam, vagyis egy globális változó tárolja azt, hogy melyik kép van betöltve?

  • Bici
    félisten

    Sziasztok!

    Megint lett időm egy kicsit fogalkozni a kép betöltő progimmal.
    Azt szeretném elegánsam megoldani, hogy feltöltök X darab képet, és amikor mindegyik betöltődött, akkor kirajzolom őket.
    Azért kell megvárni a betöltődést, mert a kirajzolásnál szeretném tudni a szélességüket.
    Jelenleg ezt úgy oldottam meg, hogy a kép objektumok onload funkciója meghív egy függvényt, ami egy globális változóban eltárolja, hogy melyik van már betöltve, ezután futtat egy ellenőrzést, és ha mindegyik kész van, akkor rajzol.

    Viszont van egy sejtésem, hogy globális változót használni nem elegáns (sokszor kaptam már ilyen kritikát), így elkezdtem gondolkodni, hogy hogy lehetne ezt szebben megoldani.
    Egyelőre nincs eredmény, így inkább megkérdezem Tőletek.

    Esetleg erre valakinek van ötlete?
    Nem akarok türelmetlen lenni, csak csillapíthatatlan tudás szomjam van. :B
    Kössz! :R

  • Bici
    félisten

    Sziasztok!

    Megint lett időm egy kicsit fogalkozni a kép betöltő progimmal.
    Azt szeretném elegánsam megoldani, hogy feltöltök X darab képet, és amikor mindegyik betöltődött, akkor kirajzolom őket.
    Azért kell megvárni a betöltődést, mert a kirajzolásnál szeretném tudni a szélességüket.
    Jelenleg ezt úgy oldottam meg, hogy a kép objektumok onload funkciója meghív egy függvényt, ami egy globális változóban eltárolja, hogy melyik van már betöltve, ezután futtat egy ellenőrzést, és ha mindegyik kész van, akkor rajzol.

    Viszont van egy sejtésem, hogy globális változót használni nem elegáns (sokszor kaptam már ilyen kritikát), így elkezdtem gondolkodni, hogy hogy lehetne ezt szebben megoldani.
    Egyelőre nincs eredmény, így inkább megkérdezem Tőletek.

  • Bici
    félisten

    Szia.

    Sajnos még mindig nem értek a canvas-hoz, így megint csak a kódodról fogok beszélni.

    > Remélem, nem "csúnya" nagyon a kódom.

    Nem fogok kertelni, szerintem nem fogod magadra venni, nem is azért írom, de... igen az, sajnos elég csúnya :(
    Na persze ez nem gond! Tényleg nem. Egyrészt mert mindenki kezdi valahol, másrészt meg az látszik, hogy más múltad van. Szépen nem így irunk JavaScript kódot.

    Ezekkel van probléma benne:

    var betolt = function(i,b,a)
    {
    imageObj[i].onload = function ()
    {
    ctx.drawImage(imageObj[i], b, 0, d, a);
    };
    };

    i, b, a -> ezek a formális változónevek egész egyszerűen rosszak, sosem adunk egybetűs váltzóneveket!
    Nem tudni, hogy mit jelölnek. i az vajon index, a b meg a, na erre még tippe sincs az embernek. Nincs overhead akkor sem, ha 1 betű helyett 20 hosszú változó neveket használsz, cserébe értelmes lesz a kód. Ennek azért van jelentősége, mert
    1: egy cégnél nem csak te fogod a kódodat olvasni, hanem előbb utóbb más is. És kontextus nélkül ezek a nevek konkrétan hátráltatják más munkáját, az idő pénz, tehát az ilyen nevek használatával pénz deficit keletkezik (lol ;] ). Komolyra fordítva a szót, tényleg más is akarja még olvasni a kódod, ne adj isten módosítani, olyankor jól jön ha "self-descriptive" a kódod.
    2: JS-ben gyakran végzünk minifikálást, ami az egyik állomása a buildelésnek, így nem kell figyelni arra, hogy minél tömörebb legyen a kód, a végtermék úgyis tömör lesz.
    Példa: még ennél a minimalista példánál is látszik, bár mondanom sem kell, hogy értelmesebb kódnál jobban kijön a minifikálás "előnye"

    Before (tordeltem):
    var myOwnImageObject = [];
    function imageLoading(indexVar, someOtherVarWhichHasADescriptiveName, anotherFormalParam) {
    myOwnImageObject[indexVar].onload = function() {
    context.drawImage(
    myOwnImageObject[indexVar],
    someOtherVarWhichHasADescriptiveName,
    0,
    wut,
    anotherFormalParam
    );
    };
    }

    After:
    function imageLoading(n,a,e){myOwnImageObject[n].onload=function(){context.drawImage(myOwnImageObject[n],a,0,wut,e)}}var myOwnImageObject=[];

    Tehát nincs igazán érv az egybetűs változónevek mellett.

    3:
    Nem túl jó kódod stílusa. Gondolom C++-ból jöttél át, legalábbis én úgy tudom, hogy ott szoktak K&R style -t használni. Ez az automatikus pontosvessző , áhh inkább írom angolul úgyis úgy tudsz rákeresni: automatic semicolon insertion miatt nem ajánlott így kódolni JavaScriptben. Nagyon sok verzió létezik, én leginkább az airbnb-hez tartom magam. Számomra ez eredményezi a leginkább olvasható, karbantartható kódot. Tehát ha az airbnb szerint írjuk a kódodat, akkor valahogy így nézne ki (ha én írnám akkor is):

    var c = document.getElementById("myCanvas"),
    ctx = c.getContext("2d"),
    files = document.getElementById("files-upload").files,
    imageObj = [],
    a = (1920 - (files.length - 1)) / (files.length);

    function betolt(i, b, a) {
    imageObj[i].onload = function() {
    ctx.drawImage(imageObj[i], b, 0, d, a);
    };
    }

    for (var i = 0, len = files.length; i < len; ++i) {
    b = (a + 1) * i;
    imageObj[i] = new Image();
    imageObj[i].src = "útvonal" + files[i].name;
    betolt(i, b, a);
    }

    4:
    Az a változót tudatosan, vagy sem, de globális scope-ba helyezted, ez rossz szokás, abszolút kerülendő.

    5:
    ez inkább jó tanács: JSHint vagy egyéb linter toolok használata javallott. Szinte minden Editorhoz, IDE-hez létezik már plugin.

    Üdv

    Heló!

    Köszönöm az elemzést! :R

    A változónevekre figyelni fogok. :K
    A K&R style-t azért használom, mert én így jobban átlátom a kódok kezdőként, egyébként nem C++-ból jövök, hanem a 17 évvel ezelötti középiskolás pascal-ból. :DDD
    Igyekezni fogok ezt is megszokni.
    Hinter tool-t keresek majd a Bluefish-hez, bár lehet hogy áttérek másra.
    Viszont ami most megfogott.
    A a változót azért raktam külön, hogy ne a ciklusban fusson le minden alkalommal.
    Egy függvénybe kellene tennem?

  • Bici
    félisten

    Szia

    1: ... = Array; Ehelyett inkabb ... = [] az ajanlott. [link]

    2: ne tegyel semmit kulon fuggvenybe, ahogy fordfairlane is irta, a closure nem tartalmazza az i valtozodat, itt egy (ROSSZ) pelda, ez tortenik most a kododban.

    http://jsfiddle.net/Jim_Y/6vy2x7Lo/1/

    Latszik, hogy 10x "10" irodik ki a kepernyore, tehat ha lebontjuk, akkor

    ctx.drawImage(imageObj[10], b, 0, a, 1080);
    ctx.drawImage(imageObj[10], b, 0, a, 1080);
    ctx.drawImage(imageObj[10], b, 0, a, 1080);
    ctx.drawImage(imageObj[10], b, 0, a, 1080);

    ...stb tortenik

    Ez azert van, mert az onload fuggveny egy closure-t kepez az ot korulolelo fuggvennyel, ami azt jelenti, hogy amikor az onload fv. lefut, akkor mindig megnezni a runtime, hogy az aktualis kontextusban mi az i valtozo erteke. Mivel az onload aszinkron, ezert amikor azok lefutnak, addigra a ciklus mar vegzett, es az i ciklusvaltozo erteket 10-re novelte. Abban a pillanatban ahogy az onload lookup-olja az i-t, az mar 10-es ertekkel szerepel a kontextusban. Ezert lesz 10x"10" kiirva a konzolra.

    Ennek megoldasa, egy uj Execution Context (~ uj variable environment, ~closure) letrehozasaval orvosolhato, amiben az i valtozo mindig az eppen aktualis ertekre lesz beallitva, igy amikor az onload (lookup i) tortenik, akkor az aktualis environment context-ben az i jo ertekkel fog szerepelni.

    Ket Harom pelda:

    1: http://jsfiddle.net/Jim_Y/6vy2x7Lo/2/ reading Function.prototype.bind
    2: http://jsfiddle.net/Jim_Y/6vy2x7Lo/3/ reading closures
    3: http://jsfiddle.net/Jim_Y/6vy2x7Lo/4/ reading IIFE

    3: Az onload aszinkron muvelet, ami a ciklus lefutasa utan fog csak meghivodni.

    Itt egy szemlelteto pelda http://jsfiddle.net/Jim_Y/LsuLL7dg/1/

    A kodban a setTimeout az onload-ot szemlelteti. Latszik, hogy amit azon kivul csinalsz, az elobb fut le, mint amit azon belul.

    Udv

    Heló!

    A példáidat sajnos nem tudtam az én kódommal összehozni, ezért úgy döntöttem, hogy csak az elméletet használom fel belőle (enclosure), és kerestem erre a neten példákat, és ez lett a működő eredmény:

    {
    var c=document.getElementById("myCanvas");
    var ctx=c.getContext("2d");
    var files = document.getElementById("files-upload").files;
    var imageObj = [];
    var betolt = function(i,b,a)
    {
    imageObj[i].onload = function ()
    {
    ctx.drawImage(imageObj[i], b, 0, d, a);
    };
    };
    a = ( 1920 - (files.length - 1) ) / ( files.length );
    for (var i = 0; i < files.length; i++)
    {
    b = ( a + 1 ) * i;
    imageObj[i] = new Image();
    imageObj[i].src = "útvonal"+files[i].name;
    betolt(i,b,a);
    }
    }

    A problémát a te példáidnál az okozta, hogy nem értettem a három közti különbséget és a szintaktikát - pl. a kapcsos zárójel után írt (i), vagy az, hogy egy zárójelen belül van egy függvény az onload jobb oldalán, vagy a settimeout-os Image függvény értelmét sem értem. Ezt mind a kettes példából vettem.
    Persze, utána fogok nézni mindegyiknek, mert ez így nem állapot, hogy ilyen alap dolgokat nem tudok, csak most nem hagyott nyugodni a dolog és működésre akartam bírni olyan módszerrel, amit értek. :B
    Remélem, nem "csúnya" nagyon a kódom.

    Ezen kívül van még egy kérdésem: A betöltött képeket szeretném mouse scroll segítségével átméretezni úgy, hogy a kép nem lép ki a rendelkezésére álló keretből, hanem levágódik a széle, ami nem fér ki - persze egérrel lehetne drage-elni is a képet. További funkció lenne az egymás melletti képek közti választóvónal eltolása.
    Összességében egyfajta montázs progit akarok csinálni - egyelőre csak egymás melletti képekkel, átfedés nélkül.
    Egyelőre még nem jártam sikerrel, de felmerült egy kérdés ezzel kapcsolatban: elég ehhez egy canvas, vagy érdemesebb képenként klön canvas-t létrehozni?

  • Bici
    félisten

    Szia

    1: ... = Array; Ehelyett inkabb ... = [] az ajanlott. [link]

    2: ne tegyel semmit kulon fuggvenybe, ahogy fordfairlane is irta, a closure nem tartalmazza az i valtozodat, itt egy (ROSSZ) pelda, ez tortenik most a kododban.

    http://jsfiddle.net/Jim_Y/6vy2x7Lo/1/

    Latszik, hogy 10x "10" irodik ki a kepernyore, tehat ha lebontjuk, akkor

    ctx.drawImage(imageObj[10], b, 0, a, 1080);
    ctx.drawImage(imageObj[10], b, 0, a, 1080);
    ctx.drawImage(imageObj[10], b, 0, a, 1080);
    ctx.drawImage(imageObj[10], b, 0, a, 1080);

    ...stb tortenik

    Ez azert van, mert az onload fuggveny egy closure-t kepez az ot korulolelo fuggvennyel, ami azt jelenti, hogy amikor az onload fv. lefut, akkor mindig megnezni a runtime, hogy az aktualis kontextusban mi az i valtozo erteke. Mivel az onload aszinkron, ezert amikor azok lefutnak, addigra a ciklus mar vegzett, es az i ciklusvaltozo erteket 10-re novelte. Abban a pillanatban ahogy az onload lookup-olja az i-t, az mar 10-es ertekkel szerepel a kontextusban. Ezert lesz 10x"10" kiirva a konzolra.

    Ennek megoldasa, egy uj Execution Context (~ uj variable environment, ~closure) letrehozasaval orvosolhato, amiben az i valtozo mindig az eppen aktualis ertekre lesz beallitva, igy amikor az onload (lookup i) tortenik, akkor az aktualis environment context-ben az i jo ertekkel fog szerepelni.

    Ket Harom pelda:

    1: http://jsfiddle.net/Jim_Y/6vy2x7Lo/2/ reading Function.prototype.bind
    2: http://jsfiddle.net/Jim_Y/6vy2x7Lo/3/ reading closures
    3: http://jsfiddle.net/Jim_Y/6vy2x7Lo/4/ reading IIFE

    3: Az onload aszinkron muvelet, ami a ciklus lefutasa utan fog csak meghivodni.

    Itt egy szemlelteto pelda http://jsfiddle.net/Jim_Y/LsuLL7dg/1/

    A kodban a setTimeout az onload-ot szemlelteti. Latszik, hogy amit azon kivul csinalsz, az elobb fut le, mint amit azon belul.

    Udv

    Köszönöm szépen a részletes segítséget! :R Teljesen érthető. :K
    Este végignézem a linkelt példákat.

  • Bici
    félisten

    Nem az a gond, hogy a closure-on belül az i indexváltozó nem fog stimmelni az event lefutásakor?

    Én is ilyesmire tippelek, mert valószínűleg a következő ciklus hamarabb írja felül a ciklus az i-t, mint ahogy betöltődne a kép.
    Este kipróbálom a két for ciklusos módszert, hátha. Viszont itt sem biztosított, hogy a képek addigra betöltődnek. Mi van, ha nagyobb egy kép?

    Olyasmi megoldáson töröm a fejem, ami biztosítja, hogy a ciklusok ne vágják felül az imageObj[I] változót, hanem egymástól függetlenül várják ki a betöltést.

    Lehet, hogy egy külön függvénybe kellene raknom az onload-ot és az i-t paraméterként beadni?

  • Bici
    félisten

    ha az src beálltást az onload elé teszed úgy sem jó?

    Próbáltam, ugyanaz.

    Az a baj, hogy nem látom még át hogy mi történik a háttérben, és mi okozza a problémát. Valami időzítési móka lesz, szerintem, de lehet, hogy tévedek.
    Olyan ciklus nincs, ami egy eseményre megy csak tovább? :D
    Esetleg a változónévként működő tömb elemek akadnak össze a ciklus különböző köreiben?
    Lehet, hogy mégsem a indexes megoldást kellene erőltetnem, hanem valami pointeres mókát?
    Vagy az egész kód alapvetően rossz felépítésű? Nem tartom bonyolult dolognak, hogy egy lista alapján képeket töltök be canvas-ba, ezért furcsa, hogy máris ilyenbe ütköztem.

  • Bici
    félisten

    Azt írja, hogy a drawImage függvény szignatúrája nem jó...
    Uncaught TypeError: Failed to execute 'drawImage' on 'CanvasRenderingContext2D': No function was found that matched the signature provided

    Ja nem - [link]
    Note If you're specifying an image, be sure the image content has loaded fully if you're calculating the width and height of the img tag.

    Igen, én is erre jutottam, de hogy oldom meg, hogy addig várjon a következő körrel, míg meg nem hívódik az onload()?
    Sorry, ha hülyeséget kérdeztem, de ebben kezdő vagyok.

  • Bici
    félisten

    Sziasztok!

    Javascript-ben mi a módja egy változó nevének a dinamikus változtatásának?
    HTML5 Canvas-ba kell betöltenem sok képet. Előre nem tudom, hogy hány kép lesz; amennyit a júzer kiválaszt.
    Vagyis nekem kellene létrehoznom a ImageObject változókat, hogy ne mindig ugyanabba a változóba töltse be a képet.
    Próbálkoztam ImageObject[i]-vel is az alábbi módon:

    var c=document.getElementById("myCanvas");
    var ctx=c.getContext("2d");
    var files = document.getElementById("files-upload").files;
    var imageObj = Array;
    for (var i = 0; i < files.length; i++)
    {
    imageObj[i] = new Image();
    imageObj[i].onload = function()
    {
    ctx.drawImage(imageObj[i], b, 0, a, 1080);
    }
    imageObj[i].src = "path/"+files[i].name;

    Erre sajna ezt kapom:

    Uncaught TypeError: Failed to execute 'drawImage' on 'CanvasRenderingContext2D': No function was found that matched the signature provided.
    imageObj.(anonymous function).onload

    A DrawImage-es sorban történik ez a hiba.

    Mi a megszokott eljárás ilyen esetben?

    Kössz! :R

    Közben arra a - nem biztos, hogy helyes - megállapításra jutottam, hogy a hibaüzenetet az okozza, hogy a ciklus akkor is tovább megy, ha a kép még nem töltödött be, így nem tud lefutni az onload esemény.
    Ezt hogy lehet megoldani?

  • Bici
    félisten

    Sziasztok!

    Javascript-ben mi a módja egy változó nevének a dinamikus változtatásának?
    HTML5 Canvas-ba kell betöltenem sok képet. Előre nem tudom, hogy hány kép lesz; amennyit a júzer kiválaszt.
    Vagyis nekem kellene létrehoznom a ImageObject változókat, hogy ne mindig ugyanabba a változóba töltse be a képet.
    Próbálkoztam ImageObject[i]-vel is az alábbi módon:

    var c=document.getElementById("myCanvas");
    var ctx=c.getContext("2d");
    var files = document.getElementById("files-upload").files;
    var imageObj = Array;
    for (var i = 0; i < files.length; i++)
    {
    imageObj[i] = new Image();
    imageObj[i].onload = function()
    {
    ctx.drawImage(imageObj[i], b, 0, a, 1080);
    }
    imageObj[i].src = "path/"+files[i].name;

    Erre sajna ezt kapom:

    Uncaught TypeError: Failed to execute 'drawImage' on 'CanvasRenderingContext2D': No function was found that matched the signature provided.
    imageObj.(anonymous function).onload

    A DrawImage-es sorban történik ez a hiba.

    Mi a megszokott eljárás ilyen esetben?

    Kössz! :R

  • Bici
    félisten

    Akkor a nagybetűket törlés helyett alakítsd kicsire.

    p_sender.value=p_sender.value.toLowerCase().replace(/[^a-z]/g,'');

    basszus, tényleg. :D Köszi!

  • Bici
    félisten

    Én meg a Tiédet nem értem, de utánanézek a w3schools-on, hogy értsem is.
    Pedig nagyon egyszerű. A függvény hívást az űrlapelem onkeyup és onchange eseményére kötöm rá. Az első akkor fut le, ha begépelsz 1 betűt (és felengeded a billentyűt), a másik meg akkor, ha mondjuk bemásolsz valami szöveget az űrlap elembe vagy simán csak elveszti a fókuszt. Pareméterként az űrlap elem objektumát adom át, így a szövegmanipulálásnál egyből tudom, hogy melyik űrlapelem eseménye hívta meg a függvényemet. Ezzel egyrészt megspórolom a DOM-ban való turkálást, másrészt a függvénynek így teljesen mindegy lesz, hogy melyik input-nak az értékét kell módosítsa.

    A függvényben egy egyszerű reguláris kifejezéssel működő betűcsere van. A reguláris kifejezés mindenre karakterre match-el, ami nem a-z közötti betű. A reg. kifejezés végén a g kapcsoló mondja meg, hogy ne csak az első előfordulást cserélje, az i kapcsoló meg azt, hogy a kis-nagybetűk közötti különbséget ne vegye figyelembe. A replace második paramétere az üres string, erre cserélünk minden olyan karakter, amire ráillik a pattern-ünk.

    Köszi, csak a "/[^a-z]/gi" részt nem értettem. De már értem, megnéztem a w3schools-on. :)
    Viszont az "i" nem kell a végére, mert így engedi a nagybetűket is, nekem meg csak kicsik kellenek.
    Köszi a segítséget! :R

  • Bici
    félisten

    A kódodat nem nagyon értem, de ha ilyen hosszú, akkor már régen rossz.

    Például itt egy javascript függvény, ez azt csinálja, amit szeretnél:

    function strip_nonalpha(p_sender){
    p_sender.value=p_sender.value.replace(/[^a-z]/gi,'');
    }

    És a hozzá tartozó ürlapelem:

    <input type="text" name="szoveg" value="" onkeyup="strip_nonalpha(this);" onchange="strip_nonalpha(this);">

    Köszi, kipróbálom.
    Én meg a Tiédet nem értem, de utánanézek a w3schools-on, hogy értsem is. :)

    Az enyém úgy műxik, hogy megvizsgálja, hogy az éppen leütött karakter szerepel-e az általam definiált karaktersorozatnak.
    A kód legalább két értékadással rövidíthető lenne, csak az átláthatóság keddvéért csináltam így. De már látom, hogy túl nyakatekert megoldás.

  • Bici
    félisten

    Hali!

    Írtam egy js kódot a szövegmezők ellenőrzésére:

    function showAddress(adat)
    {
    document.forms["capsform"][adat].value=document.forms["capsform"][adat].value.toLowerCase();
    abc="abcdefghijklmnopqrstuvwxyz";
    szoveg=document.forms["capsform"][adat].value;
    hossz=document.forms["capsform"][adat].value.length;
    if (abc.match(szoveg.charAt(hossz-1)) == null)
    {
    document.forms["capsform"][adat].value=szoveg.substring(0,hossz-1);
    }
    }

    Minden jó, de a \|[$*ˇ^¨+()? karaktereket átengedi, mivel a "abc.match(szoveg.charAt(hossz-1))" kifejezés nem ad vissza semmilyen értéket. :F
    Próbáltam már más dolgokat is, de egyelőre semmi sem úgy műxik, ahogy én szeretném.
    A cél az, hogy csak és kizárólag az angol abc kisbetűit lehessen beírni a mezőbe, és ha mást írok be, akkor az törlődjön, vagy bele se kerüljön.

    Köszi!
    (Közben én is kísérletezem tovább.)

  • Bici
    félisten

    Bármelyik javascript tutorial megfelel, a feladathoz semmilyen extra dolgot nem kell használni. W3Schools-os javascript leírást ajánlom, de lehet, van könnyebben olvasható is a neten.

    Nem csak az érdekel, hogy hog ylehet megcsinálni, hanem hogy hogy érdemes.
    Ennél a feladatnál a józan észt leszámítva nagy trükköt nem tudsz bevetni, cserébe jó hosszú lesz a kódod.

    azt már tudom, hogy az "onSubmit" fv.-nyel kell megoldani.
    Az onsubmit alapvetően nem függvény, hanem egy esemény, ami akkor hívódik meg, amikor az adott űrlapot elküldöd. (Nyilván, az onsubmit esemény értéke egy függvény).
    A különféle ellenőrzéseket /extrákat rákötheted még az űrlap elemek onfocus és onblur eseményeire, ízlés szerint. Az onfocus akkor fut le, amikor az űrlap elem aktív lesz (pl. ráklikkelsz, rámész tabulátorral), az onblur pedig amikor inaktív lesz. Továbbá kisérletezhetsz az onchange eseménnyel is, ez akkor fut le, ha változik az űrlapelem értéke, vagy elveszíti a fókuszt. (Utóbbiban nem vagyok 100%ig biztos). Ezt úgy értsd, hogy pl. egy szövegdoboznál minden egyes betű beírásakor/törlésekor le fog futni. Pl. jelszó beírásnál ezzel tudod látványosan ellenőrizni, hogy elég hosszú-e a jelszó.
    (alapból piros x mellette, onchange-nél meg adott feltételek esetén lecseréled zöld pipára vagy visszacseréled piros x-re)

    "Az onsubmit alapvetően nem függvény, hanem egy esemény, ami akkor hívódik meg, amikor az adott űrlapot elküldöd."

    Bakker, tényleg. :D Némi ActionScript tudás után erre rá kellett volna jönnöm. :B

    A leírásod alapján nekem úgy tűnik, hogy a JS hasonlít az AS-re, mert eseményvezérelt, vagy hogy szokás szépen mondani. :)
    Köszi a infókat, szerintem már menni fog. :R

  • Bici
    félisten

    Sziasztok!

    Egy regisztrációs űrlap kitöltésének helyességét szeretném ellenőrizni JS-el.
    Egyrészt figyelni akarom, hogy a kötelező mezőkben van-e adat, másrészt pedig bizonyos mezőkbe csak a megengedett karakterek mehetnek (pl felhasználónévhez csak angol kisbetű, telefonszámhoz csak szám, stb.).

    Erre tudtok valami jó kis leírást? Netán példaprogit?
    Guglizok folyamatosan, de csak részletekben találtam eddig infókat.
    Nem csak az érdekel, hogy hog ylehet megcsinálni, hanem hogy hogy érdemes.
    Egyébként egy sima Form-ról van szó, és azt már tudom, hogy az "onSubmit" fv.-nyel kell megoldani.

    Köszi!

Új hozzászólás Aktív témák

Hirdetés