- iPhone topik
- iGO Primo
- Redmi Note 13 Pro 5G - nem százas, kétszázas!
- Megérkezett a Google Pixel 7 és 7 Pro
- Samsung Galaxy S23 Ultra - non plus ultra
- Samsung Galaxy Watch7 - kötelező kör
- Milyen okostelefont vegyek?
- Apple Watch Sport - ez is csak egy okosóra
- Magyarított Android alkalmazások
- Google Pixel 9 Pro XL - hét szűk esztendő
-
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
-
Muton
addikt
válasz
Sk8erPeter #2798 üzenetére
köszi!
holnap normálisan megköszönöm, csak most húznom kell kórházba -
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:
-
Muton
addikt
Hello!
Jquery Mobile-al kapcsolatban kérnék segítséget.
van egy html-em, benne egy "sima" javascript, abban egy var userid; és egy login(userid); fv.
hogy tudok egy jqm-os scriptben értéket adni egy nem jqm-es változónak, és fv-t meghívni?
illetve fordítva: a sqm használjon egy nem jsm-es változótMert ezt szeretném megcsinálni, csak loginra:
<!DOCTYPE html>
<html lang="en">
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.6.4.min.js"></script>
<script type="text/javascript" src="http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.js"></script>
<script type="text/javascript" src="http://dev.jtsage.com/jquery.mousewheel.min.js"></script>
<script type="text/javascript" src="http://dev.jtsage.com/cdn/simpledialog/latest/jquery.mobile.simpledialog.min.js"></script>
</head>
<body>
<script type="text/javascript>
var userid = "";
function login(param){
// call login service...
}
<script>
<script type="text/javascript">
$(document).delegate('#simplestring', 'click', function () {
$(this).simpledialog({
'mode': 'string',
'prompt': 'What do you say?',
'cleanOnClose': true,
'buttons': {
'OK': {
click: function () {
$('#simplestringout').text($('#simplestring').attr('data-string'));
// itt szeretnék értéked adni a userid-nek a textbox sözvegével és meghívni a login(userid)
}
},
'Cancel': {
click: function () {
console.log(this);
},
icon: "delete",
theme: "c"
}
}
})
});
</script>
<a href="#" id="simplestring" data-role="button">Open Dialog</a>
</body>
</html> -
Karma
félisten
válasz
Sk8erPeter #2793 üzenetére
A DOM CSS-t használja, így a CSS szabályokat módosítja a DOM-on belül, nem konkrétan az elementeket manipulálja.
Szerintem nagyon frankó gondolat
(Bár inkább classokat használnék)
Egyébként a set se feltétlen bonyolult, hiszen a rule-ok szövegét lehet szerkeszteni is. Mondjuk jó kérdés, hogy a specificitással mi lesz.
-
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. -
v2izzy
tag
válasz
Sk8erPeter #2790 üzenetére
Lehet kicsit értelmetlenül fogalmaztam de arra gondoltam amit Karma írt.
-
Karma
félisten
válasz
Sk8erPeter #2790 üzenetére
A .css() a már meglévő elemekhez ad stílust, de amik majd csak a jövőben jönnek létre, arra nem tudod ráapplikálni a stílusokat csak a .css() használatával.
.on()-nal meg ilyesmivel kéne varázsolni.
-
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...
-
v2izzy
tag
válasz
Sk8erPeter #2788 üzenetére
Nem kell hozzáférni a css fájlhoz, én sem abból olvasom ki. A stíluslapok betöltődnek a DOM-ba és innen könnyen lehet kezelni őket, szóval egy értékadás nem a fájlt írja át hanem csak a DOM-ba. A .set()-et azért tartanám jónak, mert pl. 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. Sebességbeli különbséget nem tudok, de kíváncsi lennék, meg kellene nézni. Plusz így nem tesz a html kódba egy ronda style attribútumot.
-
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é. -
v2izzy
tag
válasz
Sk8erPeter #2786 üzenetére
Igen arra való. Kiválaszthatod, hogy melyik fájlban/fájlokban keressen, mert így gyorsabb lehet és csak ami selector-t a jQuery átad ($(selector).styled()), azt megkeresi és visszaadja. Még lehetne akár bővíteni olyannal hogy legyen egy .set() is, tehát lehessen változtatni a CSS-t.
Viszont amiben nem voltam biztos, hogy ha van több fájl és azokban valamelyik selectorhoz tartozó stílus többször is szerepel, akkor melyiket tartsam meg? Most úgy csinálja, hogy mindig ha a következő fájlban lévő felülírja a már szereplő stílusokat. Ez logikus, de nem tudom, hogy ez a legjobb megoldás. -
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. -
v2izzy
tag
Hello!
Nemrég felmerült egy olyan gondom, hogy el akartam érni CSS stílus értékeket JS-el de úgy hogy nem egy meglévő elem stílusát vizsgálom. Meg is találtam hogy el lehet érni, de elég hosszadalmas mire hozzá lehet jutni a kívánt értékhez. Keresgettem jQuery-ben valami szép megoldást rá (vagy nem jQuery-ben), de nem nagyon talátam. Úgyhogy csináltam egy kis plugin-t, ami a beadott selector szerint megkeresi az ahhoz tartozó stílusokat. Akinek van kedve nézze meg és lehet közreműködni is akár, mert lehet még javítani/plusz funkciókat bele tenni.+ részben ennek segítségével elkészült egy sportversenyeknél használt csoport és bracket készítő bundle-öm. Akinek netán ilyenre lenne szüksége.
</self-reklám>
-
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.
-
Soak
veterán
válasz
Sk8erPeter #2781 üzenetére
Ha megnézed akkor úgy működik a dolog (azért szúrtam be az elején, hogy miként történik az átirányítás az index.php-ről, neked biztos nem új, de én még nem találkoztam így használva JS-el) , hogy a myTouch div tartalmát manipulálod a navigációs gombokkal, kb mint egy iframe. Na most ha innen elirányítottam php-vel egy oldalra akkor az nem formázva jelent meg, mivel nem a myTouch div-ben volt benne - az index.php-n belül - ezért nem is volt soha hozzácsatolva a css file meg hasonlók. De tovább gondolva az egészet, az átirányitást php-vel kell megoldani, csak egyszerűen lesz egy ugyanilyen oldal - mint az index.php - ami keretül szolgál a többinek, viszont ezt csak bejelentkezett userek láthatják. És majd a bejelentkezett tartalmakat is ezen "keresztül" lehet elérni.
-
Soak
veterán
válasz
Sk8erPeter #2779 üzenetére
Tisztában vagyok azzal hogyan kéne kinéznie a dolognak. Desktop platformon már sokkal bonyolultabban megoldottam (mármint a password hashelésétől kezde pár dolgot implementáltam) .
A problémám az volt, hogy a myTouch div-et manipuláljam, de azóta leesett, hogy a gondolat menet alapból hibás mivel nem hagyja el az oldalt, ezért nem is tudja újra ellenőrizni, hogy be van-e jelentkezve. -
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.
-
Soak
veterán
válasz
Sk8erPeter #2777 üzenetére
Azért mert ugyan átmegy, de kiesik ebből az egész myTouch div-es dologból. Tehát csak szimplán formázás nélkül behozza a page-t. Amikor meg a gombokkal navigálok akkor nem megyek el az index pageről csak a myTouch tartalmát manipulálom, legalábbis ha jól értem az elvet.
-
Sk8erPeter
nagyúr
-
Soak
veterán
Sziasztok !
Ezzel csinálok egy mobilos felületet iOS-re : http://web20boom.com/web/touch.php . Nagyon egyszerű és jól érthető számomra, viszont egy valamiben elakadtam. Ha betöltöm az index.php-t akkor automatikusan átirányít így :
var myTouch;
$(document).ready(function () {
myTouch = jsTouch.init('myTouch', { width: 320, page: 'pages/sign_in.php' } );
jsTouch.resize();
});
// prevent default scroll
document.addEventListener('touchmove', function (e) { e.preventDefault(); }, false);Ezek után a linkekkel lépés így történik :
<a class="button back" onclick="jsTouch.loadPage('pages/home.html', { transition: 'slide-right' });">Back</a>
.
A probléma amit nem tudok megoldani, az az ,hogy van a sign_in page-m :
<div class="toolbar">
<h1>Sign In</h1>
<a class="button back" onclick="jsTouch.loadPage('pages/home.php', { transition: 'slide-right' });">Back</a>
</div>
<div class="content">
<form id="lform" name="lform" method="post" target="lframe" action="pages/sign_in_form.php">
<ul class="rounded">
<li>
<div class="label">Email</div>
<div class="field"><input type="email" name="e_mail" value="" autocapitalize="off"></div>
<div class="clear"></div>
</li>
<li>
<div class="label">Password</div>
<div class="field"><input type="password" name="password" value="" autocapitalize="off"></div>
<div class="clear"></div>
</li>
</ul>
<div style="text-align: center">
<a href="javascript: document.getElementById('lform').submit();" class="button-green" style="width: 270px">Sign In</a>
<br><br>
<iframe name="lframe" style="width: 1px; height: 1px;" frameborder="0"></iframe>
<br><br>
</div>
</form>
</div>Ez az az oldal kezeli le a formot :
<?php
if (isset($_POST)) {
$e_mail = trim($_POST['e_mail']);
$password = trim($_POST['password']);
$found_user = User::authenticate($password, $e_mail);
if ($found_user) {
$message = "Sign In successful.";
$session->login($found_user);
} else {
$message = "Email or password is invalid.";
}
}
?>Azt szeretném elérni, hogy ha lemegy a beléptetés sikeresen akkor irányítsa át a usert egy megadott lapra.
-
Muton
addikt
válasz
Sk8erPeter #2773 üzenetére
érik már egy-két söröd
köszi! -
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:
-
Muton
addikt
Heló!
kérnék egy kis segítséget
vagy két listám (pl list1 = {a,b,c,d}, list2 = {c,d,e,f}, benne objektumok id és egy date propertivel. azt szeretném elérni, hogy egy harmadik listába merge-öljem a két listát, úgy, ahogy benne legyen a,b,c,d,e,f, de c és d, ami mindkettőbe benne van (ami nem név alapján, hanem azonos id alapján derül ki, tehát a listákba csak a-k vannak) az újabb kerüljön bele.
-
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" ); -
papa019
senior tag
válasz
Sk8erPeter #2769 üzenetére
Köszönöm.
A fent említett sorra hibaüzenetet kapok:ReferenceError: allFields is not defined
[Break On This Error]
allFields.val( "" ).removeClass( "ui-state-error" );},Természetesen a dialog close paraméteréhez írtam, ahogy nálad is szerepel.
De ez alapján a gondolatmenet alapján majd próbálkozom. -
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. -
-
papa019
senior tag
válasz
Sk8erPeter #2766 üzenetére
Igen, minden más probléma megoldódott.
Fiddle-ön nekem nem jegyzi meg a szöveg mező tartalmát...
Akkor a kódom sajátossága lehet ez, ott nézelődjek, miért lehet? -
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.) -
papa019
senior tag
válasz
Sk8erPeter #2764 üzenetére
A lényeg, hogy nem PHP-vel töltöm ki a formot, hanem olyan, mintha a böngészőm megjegyezné a field tartalmát és az ismét megjelenne a következő kitöltéskor. Ha abban tudsz segíteni, hogy ezt hogyan tudom megakadályozni, nekem az is jó a form "kiürítése" helyett.
A piros "szegély": [link]
Oh most esett le, hogy a required paraméter be van állítva erre a field-re.jsFiddle-ön egy nagyon alap kód ehhez: [link]
A chosen meghívása gyakorlatilag ennyi:
$('.category').load('category_load.php', function() {
$('.category').chosen();});Ez nem ehhez a formhoz kell, ezért nincs "category" class a példakódban.
-
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.
-
papa019
senior tag
válasz
papa019 #2762 üzenetére
Tud valaki valami tuti biztos megoldást egy form elemeinek kiürítésé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. Ezeket szeretném eltüntetni.
Én az alábbi kódot találtam erre, ami egyszerűnek tűnik számomra:function clear_form_elements(ele) {
$(ele).find(':input').each(function() {
switch(this.type) {
case 'password':
case 'select-multiple':
case 'select-one':
case 'text':
case 'textarea':
$(this).val('');
break;
case 'checkbox':
case 'radio':
this.checked = false;
}
});
}Viszont ezzel több problémám is van. A jQuery chosen pluginja nem működik, ha használom. Egyszerűen nem jelenít meg semmit a select listában a plugin.
Emellett az input fieldek körül megjelenik egy halvány vörös színezet.
Nem jövök rá, hogy ez miért lehet...A függvényt egyébként az alábbi módon hívom meg, mielőtt megjelenne maga a form egy jquery dialogban.
clear_form_elements(document.getElementById('add_category_form'));
Illetve a jQuery chosen plugin meghívása előtt töltök adatokat a megfelelő select mezőkbe, szóval nem az a gond, hogy üresek a mezők.
-
papa019
senior tag
válasz
Sk8erPeter #2761 üzenetére
Pontosan ez volt a gond.
De most már tiszta a kép. -
papa019
senior tag
válasz
Sk8erPeter #2759 üzenetére
Egy kicsit belekeveredtem a dologba...
Köszönöm a segítséget.
Valahogy éreztem, hogy nagy marhaságot fogok kérdezni... -
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); -
papa019
senior tag
Most lehet, hogy óriási butaságot fogok kérdezni, de tudom valahogy csoportosítani a függvényeimet JS-ben?
Egy példával illusztrálom, hogy mit szeretnék:
Vannak mondjuk számok és szövegek, amiket kezelni szeretnék.
Létrehozok két "könyvtárat", az egyikben a számokat kezelő függvények vannak, míg a másikban a szövegeket kezelők.
É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...
-
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);" -
Muton
addikt
válasz
Sk8erPeter #2755 üzenetére
thx a mai segítséget!
nem volt tiszta, hogy magát az objektumot adja át, vagy annak a referenciáját. mert java-ban (ahol eddig mozgolódtam) nem mindegy, hogy van-e new operátor, vagy sem.
megtanítottak nevezni (rákényszerítettek a szemetek, hogy tanuljam meg
), csak az egyszerűség miatt neveztem el így
-
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.
-
Muton
addikt
válasz
Sk8erPeter #2753 üzenetére
király!
még egy kérdés mára:
szeretnék egy listát, amibe be kell tölteni objektumokat, ha vannak és üres array legyen, ha nincsenek.
ez jó? :var array;
if(!string){
array= new Array();
}else{
array=JSON.parse(string);
}else ágon nem kell a new Array valahogy?
-
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.
-
Muton
addikt
válasz
Sk8erPeter #2749 üzenetére
oké, akkor az kell csinálni, hogy:
var a="a";
var str = "b";
str=append(str,a);
function append(a,b){
return a+b;
}?
-
sztanozs
veterán
válasz
Sk8erPeter #2749 üzenetére
Global scope
Kicsit szigorúbb nyelvekből jövök - ez a nagy szabadság mindig meglep -
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. -
Muton
addikt
áááá
a fv hívó gombnak volt paramétere, amit nem vettem észre.
köszönöm amúgy a segítséget! -
Muton
addikt
válasz
Sk8erPeter #2745 üzenetére
igen, az lenne a lényeg, hogy körte értékét, barackot hozzáfűzze dinnyéhez, de nem működik.
Ha ki akarom íratni str-t alterrel, akkor addig meg sem jelenik az alert ablak, amíg a string ősszéfűzésnél ki nem törlöm az +alma.körte részt.
szóval nem b írja azt feldolgozni, hogy str+alma.körte, viszont a str+"citrom" az megy gond nélkül.
nem az a baj, hogy az alma.körte valahogy nem konvertálódik stringgé, vagy ilysemi? -
Muton
addikt
Hello!
van egy objektumom:
var alma = new Object();
adok neki egy változót értékkel
alma.korte = "barack";
azt hogy tudom elérni, hogy a "körtét" hozzáfűzze egy stringhez?
én erre godoltam, de nem jóvar str = "dinnye";
function addStr(){
str= str+alma.korte;
} -
Sk8erPeter
nagyúr
válasz
SureStudio #2742 üzenetére
-
SureStudio
tag
válasz
Sk8erPeter #2741 üzenetére
HTML CSS megvan, inkább a php érdekel...
-
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. -
SureStudio
tag
válasz
Sk8erPeter #2739 üzenetére
Hogy pl.:hogyan lehet kódokat írni (beléptető rendszer stb..)
-
Sk8erPeter
nagyúr
válasz
SureStudio #2738 üzenetére
Milyen "dolgokat"?
-
SureStudio
tag
válasz
Sk8erPeter #2737 üzenetére
Oké, köszönöm és valamit tudsz ajánlani vagy egy oldalt ahonnan leírják a dolgokat?
-
Sk8erPeter
nagyúr
válasz
SureStudio #2736 üzenetére
Nem para, előfordul. Ez tényleg szerveroldali probléma.
-
SureStudio
tag
válasz
Sk8erPeter #2735 üzenetére
Már megoldódott a probléma.
Az volt, hogy volt egy php kódom amit rosszul írtam meg és nem jelent meg, azt hittem, hogy az segítene ha valami scriptel megtudnám jeleníteni. De már megvan, egy oldalon leírták a folyamatot.
Én meg megyek a könyvtárba php tanulni.
És elnézést az értelmetlen hozzászólásomért, csak még nagyon kezdő vagyok ezen a téren és nem tudtam, hogy mi a hiba. -
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!
-
trisztan94
őstag
válasz
Sk8erPeter #2732 üzenetére
Meglesem, köszi
-
SureStudio
tag
válasz
Sk8erPeter #2731 üzenetére
Nem írtam le teljesen...
A rendszer maga megvan, csak igazából nem jeleníti meg ezért próbáltam vagy css-t vagy php-t. -
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.
-
trisztan94
őstag
Szervusztok!
Van egy file inputom, alatta egy gomb, ha rámész 'appendol' még egy inputot alá. A classuk ezeknek '.otherpic'. Na most azt szeretném, hogy ha 1 van, ugye alapból, akkor fölötte a gomb, amivel egyet el lehet távolítani (tehát hogy eggyel kevesebb kép legyen ) ne látszódjon, ha 2 vagy több van akkor viszont igen.
Itt a jquery-m rá:
$('#addfile').on('click',function(){
var count = $('.otherpic').length;
if (count == 2)
{
alert("hey mr busta");
}
});// most alert van a kód helyett, de a lényeg lejön.
Szóval a fölötte lévő gomb alapból display none.Amúgy azt hogy csinálom, hogy elvegyen eggyet, szóval az append ellentéte?
Köszi!
-
SureStudio
tag
Sziasztok!
Az lenne a kérésem, hogy nem tudtok egy olyan scriptet mely egy archívumot jelenít meg, igazából elképzelésem nem nagyon van, az oldalamra kellene és a bejegyzéseimet mutassa időrendben.
Előre is köszönöm. -
Sk8erPeter
nagyúr
válasz
trisztan94 #2727 üzenetére
Szívesen!
-
trisztan94
őstag
válasz
Sk8erPeter #2726 üzenetére
Énis megtaláltam ezt, de nem tudtam leszedni :S
De köszi,működik amit írtál
Örök hálám!
-
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)) -
trisztan94
őstag
Sziasztok!
Egy <h1>-et kéne villogtatni, a színét. Stackoverflowon láttam több megoldást is, egyik se működik. Próbáltam ajaxos oldalon meg ajax nélkülin is.
itt van az egyik
itt a mostani kódom:
html:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title></title>
<meta charset="utf-8"/>
</head>
<body>
<div id="flash"><h1 id="asd">Villogjá'</h1></div>
<input type="button" id="button" value = "Let the medzsik begin"/>
<script src="../js/jquery-1.7.2.min.js" type="text/javascript"></script>
<script src="../js/flash.js" type="text/javascript"></script>
</body>
</html>jquery:
$("#button").click(function () { $('#asd').effect("pulsate", { times:3 }, 2000); });
-
Sk8erPeter
nagyúr
-
Muton
addikt
válasz
Sk8erPeter #2721 üzenetére
köszönöm, megnézem. közben kiderült, hogy desktopon megy, csak telón nem
-
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.
-
Muton
addikt
Heló!
Van egy weblapom, ami megkap egy válasz xlm-t:
<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>hogy tudom kiszedni a válaszból a sessionid-t ? pl akármi.token formában
ezzel hívom (utána callback fv) meg:
<script>
...
function callLogin(){
var pl = new SOAPClientParameters();
var ver = new Versioning("1a");
pl.add("email", "test@test.hu");
pl.add("password", "1");
pl.add("versioning", ver);
SOAPClient.invoke(url, "login", pl, true, callLogin_callBack);
}
function callLogin_callBack(r, soapResponse){
de kellene valami, ami a választ feldolgozza
}
...
</script>a sopaclient.js-em ez
-
-=Flatline=-
tag
válasz
-=Flatline=- #2718 üzenetére
Megoldva
-
-=Flatline=-
tag
válasz
-=Flatline=- #2717 üzenetére
Itt angolul, barebone kóddal:
Mégegyszer köszönöm. Három napja nem találok megoldást
Mondjátok, hogy nem lehet és akkor másként próbálom megoldani...
-
-=Flatline=-
tag
Ha esetleg túl erdősen írtam volna le a kérésem, kérlek szóljatok és megpróbálom világosabban megfogalmazni, vagy akár berakni a háttérkódot, hogy érthetőbb legyen (noha abban egy szem js sincs, lévén csak egy adatbázis keresés, majd arrayba lökés és egy json encode ((ami lehet nem is kell)))
<3
-
v2izzy
tag
válasz
papa019 #2714 üzenetére
Így már igen működik, bár az kicsit fura, hogy az obj-nak az area property-je a polygon, majd az egész obj-ot beleteszed a polygonba.
De hát így fog működni ezzel a módszerrel az igaz. Viszont itt egy példa ami szemlélteti, hogy különböző ciklusfajták hogy kezelik a handler függvényt. Ez alapján így is írhatnád:
data = items;
data.forEach(function(x) {
...
var obj = {
'name': x[i-4],
...
'area': polygon
};
google.maps.event.addListener(polygon, 'click', function(event){
showArrays(event, obj, this.getPath());
});
google.maps.event.addListener(polygon, 'rightclick', function(event){
showContextMenu(event.latLng, obj);
});
...
}) -
papa019
senior tag
Az volt a gondom, hogy nem tudtam beletenni az összes adatot a korábbi módszeremmel az obj változóba, igazából nem értettem, hogy hogy kellene megvalósítanom a dolgot.
Nekem az adatok sorrendje teljesen mindegy, csak kirajzolom a polygonokat.
Jelenleg az alábbi módon valósítottam meg a dolgot, remélem nem csináltam benne programozói hibát (végülis működik).
function process_data(items){
var x;
var data = new Array();
data = items;
while ( x = data.pop())
{
var i = 5;
var y = x[i];
var obj = {};
var polygon = new google.maps.Polygon({
paths: google.maps.geometry.encoding.decodePath(String(y)),
strokeColor: "#0000ff",
strokeOpacity: 1,
strokeWeight: 1,
fillColor: "#00ffba",
fillOpacity: 0.4,
editable: false
});
polygon.setMap(map);
var obj = {
'name':x[i-4],
'description':x[i-3],
'address':x[i-2],
'wikipedia':x[i-1],
'points':x[i],
'category':x[i+1],
'parent_area':x[i+2],
'area':polygon
};
polygon.objInfo = obj;
google.maps.event.addListener(polygon, 'click', function(event){
showArrays(event,this.objInfo,this.getPath());
}); //kattintásra megnyílik az infowindow
google.maps.event.addListener(polygon, 'rightclick', function(event){
//this.setMap();
showContextMenu(event.latLng,this.objInfo);
});
infowindow = new google.maps.InfoWindow();
}
}
function showArrays(event,obj,vertices) {
var contentString = "<b>" + obj.name + "</b><br />";
contentString += "Leírás: " + obj.description + "<br />";
contentString += "Cím: " + obj.address + "<br />";
contentString += "Wikipedia: <a href='http://hu.wikipedia.org/wiki/" + obj.wikipedia + "'>hehe</a><br />";
contentString += "Kategória: " + obj.category + "<br />";
contentString += "Szülõ terület: " + obj.parent_area + "<br />";
contentString += "Clicked Location: <br />" + event.latLng.lat() + "," + event.latLng.lng() + "<br />";
infowindow.setContent(contentString);
infowindow.setPosition(event.latLng);
infowindow.open(map);
}A ShowContextmenu függvényt azért nem másoltam be, mert az még nincs kész.
-
v2izzy
tag
válasz
papa019 #2712 üzenetére
Például egy új embernek, vagy neked később nehezebb lesz egyből megértened, mi is történik és szerintem egy .forEach() gyorsabb is mint így (bár ez csak nagy adatmennyiségnél lenne feltűnő).
Másrészt nem az volt kezdetben a gondod, hogy csak az utoljára kiszedett tömb elemei kerülnek bele? A pop-os módszerrel ez így is van, de ha forEach-el csinálod, akkor az eventListener-ek handler függvényében, mindig az aktuális elemet tudod felhasználni és akkor így nem szükséges id. Remélem jól értelmeztem a problémát. -
papa019
senior tag
válasz
Sk8erPeter #2708 üzenetére
A térkép már inicializálva van ezelőtt a kód előtt. Ezzel annyit csinálok, hogy az adatbázisból lekért adatokból kirajzolom először a polygonokat és ennek az adatait akartam átvinni a másik függvénynek. Mindegyik polygon rendelkezik egy click és egy rightclick listenerrel, előbbire egy buborék jön fel, amiben csak szimplán kiírom az adatait, míg utóbbi esetben egy menü, amiben lehet választani, hogy törlöm vagy szerkesztem a polygont. Mindkét esetben szükségem van az adataira. A kódban csak a neve szerepelt, egyébként azóta már belekerült a leírása, címe, kategóriája, stb.
A data tömbben a területek adatai sorban vannak (abban a sorrendben, ahogy az adatbázisban), viszont azt nem értem, hogy miért baj, hogy a pop() függvénnyel veszem ki belőle az adatokat, mert szerintem ebben az esetben teljesen irreleváns az, hogy milyen sorrendben rajzolom fel a térképre a területeket. Bár mindketten írtátok, hogy érdemes lenne sorban. Az én megoldásomnak (fordított sorrend) milyen hátulütője lehet a későbbiekben? -
-=Flatline=-
tag
válasz
-=Flatline=- #2710 üzenetére
a legvége nyilván ez, csak elcsesztem
echo json_encode($rofl);
a mögötte lévő tábla, hogy érthetőbb legyen:
név: id:
ilyenvan 110
ilyenvan 1410
ilyenvan 1130
ilyenvan 34110
ilyenvan 11043
.
.
. -
-=Flatline=-
tag
Hello!
Sajnos php és mysql területén sokkal jártasabb vagyok, mint jqueryben és js-ben, de azért sikerült eddig úgy haladni, ahogy szeretnék.
A kérdés az, amennyiben van egy formom, két input mezővel az egyszerűség kedvéért, melyben az első autocomplete-al kikeresi az amúgy épp sessionban levő ID alapján, hogy a beírt adattal egyezőt talál-e az adatbázisban mögötte. A másik mező arra lenne jó, hogy amennyiben nem talál adatot, submit esetén az első mezőbe beírt adatot küldöm tovább, a második mezőbe pedig a user kézzel, automatikusan vesszővel elválasztva, egy másik táblából autocompletelve rakja be az id-kat. Ezzel eddig nincs is gond, ez akkor van, ha az első autocomplete nem talál azonos stringet a bevitthez képest a táblájában.
Ellenben, ha talál, akkor a másik input mezőt, amibe az előző eset szerint kézzel kell auto multiselect autocompletet használnia a usernek, szóval a másik mezőt az elsőben találat esetén tele szeretném rakni azokkal az idkkal, szintén vesszővel elválasztva, amiket megtalált a php sql script.
Szemléltetve:
input1 string by user: "ilyenvan", aminek az onblur hatására valami olyan függvényt kell csinálnom, ami a háttérben, mint az autocomplete, tol egy sql hívást az ilyenvan stringet keresve a táblámban, aminek egy másik cellájában van az id, amiket egy while ciklus során vesszővel elválasztva bele kellene tenni az input 2 textmezőbe, mint pl: document.submitform.outputtext2.value
ergó mondjuk van 10 rekord, ami = "ilyenvan", mind a tízhez while( $row = mysql_fetch_assoc($resultset) ) {
$rofl[] = $row['groupid'];
}
echo json_encode($lolz);és ezt a tíz id-t szeretném az input2be betolni
Remélem érthető volt, bízom benne, hogy van rá módszer
Köszönöm előre is!
-
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. -
trisztan94
őstag
válasz
Sk8erPeter #2706 üzenetére
Istenkirály vagy, köszi szépen!
Tökéletesen működik!
Ha veszel valamit tőlem hardveraprón, kapsz kedvezményt a sok segítségért!
Mégegyszer köszi!
-
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.
-
papa019
senior tag
Az adatokon való végigmenetellel nincs gondom, nekem jó ez így a pop() fügvénnyel.
A problémám sokkal inkább az, hogy a kirajzolt polygonokra kattintva a kódom hogyan fogja tudni, hogy melyik adatok kellenek neki.Pédául tegyük fel van két poligonom.
Ezeket úgy teszem be az obj-be, hogy: {2.name,2.data,1.name,1.data}
Ugye pont fordítva lesznek az obj-ben, mint ahogy kivettem őket az adatbázisból.De ott van a gond, hogy a polygonra kattintva nem tudom megmondani, hogy az adott poligonhoz melyik tartozik, kellene adni egy id-t, vagy valamit a poligonnak kirajzoláskor, mert így csak a pontok alapján tudom beazonosítani, de azt akkor megint enkódolni kellene, ajax-al átvinni szerver oldalra és csinálni egy lekérdezést az adatbázisból és úgy már megkapnám az adatait.
Viszont én szeretném a JS-ben valahogy átvinni ezeket az adatokat, hogy ne kelljen plusz lekérdezés. -
papa019
senior tag
Elakadtam a munkában, az adatbázisból betöltött adatokat szeretném egy tömbben tárolni úgy, hogy a kirajzolt polygonokra jobb gombbal kattintva fel tudjam használni azok adatait. A kód:
function process_data(items){
var x;
var data = new Array();
data = items;
while ( x = data.pop())
{
var i = 5; //egy elemnek az ötödik paramétere hordozza a koordinátáit
var y = x[i];
var obj = {};
/*$('<ul/>', { // a kapott elem kiírása ellenõrzésképpen
'class': 'my-new-list',
html: y
}).appendTo('#get_informations');*/
var polygon = new google.maps.Polygon({
paths: google.maps.geometry.encoding.decodePath(String(y)),
strokeColor: "#0000ff",
strokeOpacity: 1,
strokeWeight: 1,
fillColor: "#00ffba",
fillOpacity: 0.4,
editable: false
});
polygon.setMap(map);
var zyx = x[i-4];
obj = {
'name':zyx,
'area':polygon
};
google.maps.event.addListener(polygon, 'click', showArrays); //kattintásra megnyílik az infowindow
google.maps.event.addListener(polygon, 'rightclick', function(event){
showContextMenu(event.latLng,obj);
});
infowindow = new google.maps.InfoWindow();
}
}
function showContextMenu(caurrentLatLng,obj) {
var projection;
var contextmenuDir;
projection = map.getProjection() ;
$('.contextmenu').remove();
var a = "<a id='menu1'><div class='context'>Adatok szerkesztése</div></a>" +
"<a id='menu2'><div class='context'>Körvonal szerkesztése</div></a>" +
"<a id='menu3'><div class='context'>Törlés</div></a>";
contextmenuDir = document.createElement("div");
contextmenuDir.className = 'contextmenu';
contextmenuDir.innerHTML = a;
$(map.getDiv()).append(contextmenuDir);
setMenuXY(caurrentLatLng);
contextmenuDir.style.visibility = "visible";
var x;
x = obj.name;
alert(x);
$("#menu1").click(function(){
alert("haha");
});
$("#menu2").click(function(){
alert("haha");
});
$("#menu3").click(function(){
alert("haha");
});
}A process_data függvényben megyek végig a tárolt adatokon, kirajzolom a kordináták segítségével a poligonokat és az obj nevű objektumban tárolnám az adataikat.
A jelenlegi kódommal az a baj, hogy az utoljára kiszedett tömb elem adatai kerülnek csak bele.
Valakinek van ötlete, hogy hogyan tudom megvalósítani ezzel a módszerrel, hogy később bármelyik polygonra kattintva be tudjam azonosítani, hogy az obj objektumban melyik paraméterek tartoznak hozzá? Sajnos arra nem találtam megoldást, hogy mondjuk adok egy id-t minden poligonnak és az alapján azonosítom az adatait?Ha valaki tudna segíteni, hogy ezt hogyan tudnám megoldani, nagyon hálás lennék.
-
trisztan94
őstag
válasz
Sk8erPeter #2700 üzenetére
Nem ezzel kapcsolatban, de elakadtam..
<?php foreach($dataArray as $data) { ?>
<div class="visible">
<?php echo $data[0] . "<br/><center><a href='#' class='story_show'>Teljes Történet</a></center>"; ?>
</div>
<div class="hidden" style="display:none;">
<?php echo $data[1]; ?>
</div>
<?php } ?>Ez egy php txt file listázás, a 'visible' az egy 300 katakteres 'előnézete' a teljes történetnek. Na most az <a>-ra kattintva kéne, hogy bejöjjön a teljes, a 'hidden' rész.. itt a jQuery-m rá:
$('story_show').on('click', function () {
$('.hidden').css('display', 'inline');
});Életem első jQuery kódja nem működik
Amúgy ajaxos az oldal, lehet interferenciál valamit. Netbeans progival írtam, szintaktikai hibát nem jelez. Ja, és ráadásul az <a> 2x jelenik meg (mert ugye most egy filem van amit kilistáz) Egyszer az egész felett, másodszor meg a jó helyen.Köszi mester!
Új hozzászólás Aktív témák
Hirdetés
- BESZÁMÍTÁS! ASRock B85M Pro4 B85 chipset alaplap garanciával hibátlan működéssel
- Microsoft Surface Laptop 3 - 15 col - Fekete
- Telefon felvásárlás!! Xiaomi Redmi 9, Xiaomi Redmi 9AT, Xiaomi Redmi 10, Xiaomi Redmi 10 2022
- Telefon felvásárlás!! iPhone 13 Mini/iPhone 13/iPhone 13 Pro/iPhone 13 Pro Max
- HYNIX 2GB DDR3 RAM eladó
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PC Trade Systems Kft.
Város: Szeged