Hirdetés
- GoodSpeed: Bye PET Palack, hello SodaStream
- Geri Bátyó: Agglegénykonyha 2 – Főzés: szabályok, vagy szabadság?
- Geri Bátyó: Agglegénykonyha 3 – Paradicsomos káposzta (amit amúgy utálok)
- Elektromos rásegítésű kerékpárok
- Luck Dragon: Asszociációs játék. :)
- Rap, Hip-hop 90'
- sziku69: Szólánc.
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- sziku69: Fűzzük össze a szavakat :)
- f(x)=exp(x): A laposföld elmebaj: Vissza a jövőbe!
Új hozzászólás Aktív témák
-
trisztan94
őstag
válasz
Sk8erPeter #1996 üzenetére
+1 a RequireJS-re.
Én is azt használom, csodákat tud művelni
-
Jim-Y
veterán
válasz
Sk8erPeter #1996 üzenetére
Igazából azért nem reagáltam még, mert függ a dolog jelenleg is, sajnos az appendes módszer nem jött össze, mert ha utólag appendelem egy előre létrehozott üres divebe, akkor rossz helyen jelenik meg, nem a divben hanem alatta a táblázaton kívül, ergo nem jól jelenik meg.
Ezek a js fájlok 1-1 chartot jelentenek, és van bennük egy render() metódus, azt is próbáltam, hogy a render metóduson kívül mindent beteszek előre a megfelelő helyre, és a user interakcióra csak a render metódust hívom meg, de ilyenkor is ugyanaz a probléma mint feljebb, hogy nem ott jelenik meg a chart ahol kéne, hanem "kicsúszik" alulra, pedig a méret, meg minden egyéb rendben van.
Most azt csináltam, és így jól működik, hogy az adott helyen, ahol a chartok meg kell, hogy jelnjenek (ez egy td) felvettem egy külön divet amibe előre betöltöttem a kódot, majd az oldal elején elrejtem a divet, és csak akkor hívom meg a divre a show()-t amikor a user interakció megtörtént. Így jól működik.
De a require.js-t még meg fogom nézni
Megj: kódot sajnos nem tudok mutatni, mert business :/
-
martonx
veterán
válasz
Sk8erPeter #1996 üzenetére
Biztos annyira leesett az álla az első tök triviális öteletemtől, végül a requirejs olyan találatot vitt be neki, hogy azóta is padlón van
-
Vekko
aktív tag
válasz
Sk8erPeter #1994 üzenetére
Joomla, próbáltam sima cikként és egyéni html modulként beilleszteni.
-
Sk8erPeter
nagyúr
válasz
fordfairlane #1991 üzenetére
"Lehetséges, ha például más programrész rész is használja a document ready metódust"
Itt nem egészen értettem, mire gondoltál, a ready-nek több event handlere is lehet:
http://jsfiddle.net/y9eZZ/ -
Sk8erPeter
nagyúr
Igen, simán lehet, mivel általában a CMS-eknek viszonylag kötött, többnyire valamelyest moduláris szabályaik vannak arra, hogy hogyan lehet egy kódot a megfelelő helyre, a megfelelő módon injektálni. Nem mindegy, ezért kell olvasni a dokumentációt.
Milyen CMS-ről van szó? -
Sk8erPeter
nagyúr
válasz
trisztan94 #1972 üzenetére
"Mi az a Dictionary, class, stb dolog?"
Hát a class-t (osztály) gondolom csak nem kell már magyaráznom...Erre már azóta példát is adott martonx. Na, például itt lehetne egy status változód is, aminek az értékét a query lefutásának sikerességétől teszed függővé.
Ez az egész lesz aztán JSON-né konvertálva, ezt pedig kényelmesen feldolgozod jQuery-vel a válaszban.A korábbi asszociatív tömbös megoldást azért említettem, mert először abból indultam ki, hogy PHP-vel dolgozol. Egyébként alapvetően ez PHP-ben is szebb egy ilyen célra szánt osztállyal megvalósítva.
Olyasmiről beszéltem előtte, amit Jim-Y mutatott, de az helytelen szerintem, hogy result.0.name, mivel ez eleve nem is kifejező, meg nem túl szépen olvasható, akkor ebben az esetben inkább így a jó: result[0].name - így egyből látszik a tömbös megközelítés is.A Dictionary-ről:
http://msdn.microsoft.com/en-us/library/xfhwa508.aspx
De egyébként ezt csak lehetséges példaként említettem. -
Vekko
aktív tag
Az lehetséges, hogy ez a megoldás nem működik egy cms oldalon?
-
Vekko
aktív tag
válasz
fordfairlane #1988 üzenetére
Működik, köszönöm!
-
fordfairlane
veterán
Ez megy nálam lokálban, Firefoxon:
<style>
#idenyilik {
display: none;
}
</style>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script>
$(document).ready(function() {
$("#nyito").click(function() {
$("#idenyilik").toggle();
$("#idenyilik").load("eztet.html");
});
});
</script>
<button id="nyito">Nyílj meg!</button>
<div id="idenyilik"></div> -
Vekko
aktív tag
válasz
fordfairlane #1983 üzenetére
Köszi a script tagek maradtak el igen. Már meg is jelenik a gomb, viszont nem hozza elő a tartalmat, pedig még az eztet.html elnevezést is követtem.
-
fordfairlane
veterán
Ha sikerülne működtetnem, onnantól már ki tudnám logikázni szerintem a dolgokat.
Javascript kódot <script> tagok közé kell illeszteni.
Teszteletlen pszeudokód a problémád megoldására:
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script>
$('#nyito').click(function() {
$('#idenyilik').toggle();
$('#idenyilik').load('eztet.html');
});
</script>
<button id="nyito">Nyílj meg!</button>
<div id="idenyilik"></div> -
Vekko
aktív tag
válasz
martonx #1980 üzenetére
Annyit sikerült (nem tudom helyesen-e) utánajárnom, hogy head-be kell <script src="http://code.jquery.com/jquery-1.9.1.js"></script>, de utána ezt a (amit kaptam) kódot bodyba illesztve mégis sima txt-ként jeleníti meg. Ha sikerülne működtetnem, onnantól már ki tudnám logikázni szerintem a dolgokat.
-
Jim-Y
veterán
Sziasztok.
Van egy oldalam, illetve több különálló js fájlom, a főoldalba dinamikusan akarom betölteni a különálló .js fájlokat, és nem szeretnék ajaxot használni, ugyanis nem akarok kiszolgáló szerveroldali scriptet írni.
Jelenleg úgy néz ki, hogy ha fixen beleégetek egy ilyet az oldalba a megfelelő helyre:
<script src="child/child/doc.js"></script>
akkor minden szupi, de én ezt dinamikusan akarom megtenni, és dinamikusan akarom kiválasztani, hogy melyik js töltődjön be.
Próbáltam a
$("#container").load("child/child/doc.js") -et is, de ilyenkor maga a forrás töltődik be, pedig előtte a kódot még evaluálni kéne.
Az oldal elejére sem szeretném őket beszúrni, ugyanis egy olyan frameworknek a részei a js fájlok amik rögtön renderelik is magukat. Ergo ha én megnyomok egy gombot, akkor töltődjön be a megfelelő javascript forrás, ami rögtön rendereli magát és lesz belőle valami grafika
Ötlet?
-
Vekko
aktív tag
Sziasztok,
Egy olyan kódra lenne szükségem, ami kinyit egy tartalmat, de ha nem nyitom ki akkor nem is tölti be magát addig. Tehát egy oldal gyorsítására szeretném használni. "Lenyíló" tartalom féleséget képzeltem el.
Egy másik topikból küldtek át ezzel:
$.ajax({
'type' : 'POST',
'url' : 'http://url.hu/url.html', //url címe
'data' : 'data=1', //post adatok
'success' : function(data){ //ha van visszajelzés akkor visszaküldi az adatokat
$('#iderakdbe').html(data); //betölti az iderakdbe id-jü div-be a tartalmat
}
});Számomra ez így még nem érthető. Nem tudtam alkalmazni.
-
martonx
veterán
válasz
trisztan94 #1976 üzenetére
C# - ha nem tévedek - csak számokkal enged tömböt indexelni.
C#-ban mint a klasszikus objektum orientált nyelvekben, a JSON-hoz (is) osztályokat érdemes használni.Egy C# példa :
public class Pelda
{
string name { get; set; }
string value { get; set; }
string description { get; set; }
}
//Aztán értéket adsz az osztályodnak
Pelda product = new Pelda();
product.name = "Apple";
product.value = 1;
product.description = "teszt szöveg";
string json = JsonConvert.SerializeObject(product);Természetesen a Pelda osztályodból csinálhatsz tömböt, List-et, akármit, és a végén meg azt szerializálod.
-
Jim-Y
veterán
válasz
trisztan94 #1976 üzenetére
Sajnos nem ismerem a C#-ot
-
trisztan94
őstag
Annyit kérdeznék még, hogy a kódodban úgy használod a tömböt a php-ban, hogy response[$i]["name"], mikor neked, ha jól láttam egy dimenziós tömböd van? Az a ["name"] az ott micsoda? Nekem az ASP.NET szintaktikája (c#) nem engedi, aláhúzza és exceptionnal kidob. Nem tudod véletlenül annak a szintaktikáját?
tehát ez hibás neki:
response[0]["name"] = valami;
illetve ez is, mátrixxal:
response[0,0]["name"] = valami;és ezt is, megint mátrixxal:
response[0,"name"] = valami;Írtam már ASP.NET hivatalos fórumba de nem érkezett még válasz
-
Jim-Y
veterán
válasz
trisztan94 #1974 üzenetére
Annyi a lényeg, hogy name.value szintaktikával eléred javascripttel a json objektum tulajdonságait.
Maga a JSON szintaktika végtelenül egyszerű, referenciát 2 perc alatt el lehet olvasni http://www.json.org/
JS-ben pedig így tudod használni: http://www.json.org/js.html
-
Jim-Y
veterán
válasz
trisztan94 #1972 üzenetére
PHP-ben írsz például egy ilyet:
<?php
$response = array();
for($i = 0; $i < 10; ++$i){
$response[$i]['name'] = "name number ".$i;
$response[$i]['another_field'] = "field number ".$i;
}
$response['status'] = "siker";
$result = json_encode($response);
echo $result;
?>Itt a $result egy json objektum lesz, amit visszaküldesz az ajax hívásnak, majd a JS oldal ezt látja belőle:
{
"0": {
"name": "name number 0",
"another_field": "field number 0"
},
"1": {
"name": "name number 1",
"another_field": "field number 1"
},
"2": {
"name": "name number 2",
"another_field": "field number 2"
},
"3": {
"name": "name number 3",
"another_field": "field number 3"
},
"4": {
"name": "name number 4",
"another_field": "field number 4"
},
"5": {
"name": "name number 5",
"another_field": "field number 5"
},
"6": {
"name": "name number 6",
"another_field": "field number 6"
},
"7": {
"name": "name number 7",
"another_field": "field number 7"
},
"8": {
"name": "name number 8",
"another_field": "field number 8"
},
"9": {
"name": "name number 9",
"another_field": "field number 9"
},
"status": "siker"
}ajaxon belül:
success: function(result){
if(result.status === "siker"){
// TODO
}
result.0.name //name number 0
}Látszik, hogy a json azért jó, mert a javascriptes objekt notációval tudod elérni a json fieldjeit. A példában result.0.name
-
trisztan94
őstag
válasz
Sk8erPeter #1971 üzenetére
Mi az a Dictionary, class, stb dolog?
Nekem kb így néz ki a mátrixom (2 dimenziós tömb):
Ez így elég gányolásnak néz ki részemről, jól csinálom?//öt tulajdonságot tárolunk, de 9 elemet küldünk vissza, ezért kétdimenziósba rakom
string[ , ] response= new string [5,9];
//hány oldal van összesen
response[0,0] = totalPages.ToString();
//hanyadik oldalt jelenítjük meg
response[1,0] = page.ToString();
//ha eddig eljut sikeres a kérés
response[4,0] = "true"; //ez nekem a legvégén van, a Json.Encode előtt, csak nem másolom be ide az egészet
int i = 0;
foreach(var tutorial in db.Query(query)){
//taralmat lementjük
response[2,i]="<div class='Tutorials grid_4'><h3>"+ tutorial["Title"] +"</h3><object><param name='src' value='"+ tutorial["VideoPath"] +"'><param name='controller' value='true'></object></div>";
//címet letároljuk
response[3, i] = tutorial["Title"];
i++;
}A status property az mi?
Új még nekem ez
-
Sk8erPeter
nagyúr
válasz
trisztan94 #1964 üzenetére
Javaslom, hogy teszteld: alakítsd át szerveroldalon JSON-né a választ (tömb, Dictionary, class, stb.), majd kliensoldalon, a megfelelő $.ajax() függvény success callback-jében egyszerűen egy console.log(data) segítségével írasd ki a callback function argumentumát, és meglátod, milyen egyszerű lesz kezelni.
Pl. tudod vizsgálni, hogy
if(data.status === "success"){
// ....
}
ha korábban, szerveroldalon beállítottad a status property-t is. Tényleg egyszerű kezelni, próbáld ki. -
martonx
veterán
-
Karma
félisten
válasz
martonx #1968 üzenetére
StackOverflow alapján van aki egész szofisztikált megoldást tett le publikusan az asztalra
Meg is fogom próbálni, mert eddig ignoráltam ezt a kérdéskört a Web API-s projektjeimben (nem volt szükség rá természetükből adódóan).
-
martonx
veterán
Jaja, csak Web API-hoz még mindig képtelenek voltak elkészíteni az OutputCache kezelést (jó persze max 1 óra alatt olyan cache kezelést ír hozzá az ember, amilyet akar, legalábbis egy programozói szint fölött).
Szóval nekem valahogy még mindig csak gyerekcipőben járó dolognak tűnik, de nagyon ígéretes az biztos. -
martonx
veterán
válasz
trisztan94 #1964 üzenetére
az a JSONP, amire te gondolsz, és a cross-domain hívások.
ASP.NET-nél Json.Net-et használva bármilyen objektumot lazán serializálsz.
-
trisztan94
őstag
válasz
Sk8erPeter #1963 üzenetére
Fú, köszönöm ezt a remek leírást, így fogom csinálni!
Én is gondoltam a tömbös megoldásra, nem is értem miért nem azzal csináltam
Amúgy ASP.NET a szerveroldal.
A JSON-t sosem használtam, úgy tudtam, hogy azt különböző domain-en/ip címen lévő oldalak közti információátadásra használják(például amikor facebook profiladatokat szedünk ki). Mivel (ezek szerint) félreinformált voltam sosem néztem nagyon utána. (egyik nagy hibámnak tartom amúgy ezt. Sok dolognak nem nézek addig utána amíg nincs rá szükség)
Nem tudsz esetleg egy jó oktatóanyagot róla?Köszi mégegyszer
-
Sk8erPeter
nagyúr
válasz
trisztan94 #1962 üzenetére
Ja értem. Szerintem amúgy jobban jársz, ha a töltődést jelző kép egy background-image, és van egy ehhez tartozó div, amire csak ráraksz egy loading class-t, aminek megvannak a maga tulajdonságai CSS-ben (szélesség, magasság, maga a töltődést jelző háttérkép). Így csak megjeleníteni és eltüntetni kell ezt a bizonyos divet (elég a <div class="loading"></div>). De végül is nem ez a lényeg.
Tehát betöltéskor (vázlatszerűen)
1.) megjeleníted a töltődést jelző képet
2.) elküldöd szerveroldalra AJAX-szal, hogy milyen tartalmat szeretnél megjeleníteni, esetleg azt is, hogy annak hányadik oldalát
3.) lekéred a tartalmat, a következőket berakod egy asszociatív tömbbe (most feltételeztem, hogy PHP-vel dolgozol, de végül is mindegy), amit majd átalakítasz JSON-formátumra (pl. PHP-ben json_encode()-dal, mert azt kliensoldalon nagyon könnyű kezelni jQuery-vel!):
- hány oldalas a tartalom
- épp hányadik oldalt fogod abból megjeleníteni
- magát a tartalmat
- esetleg egyebet, ami neked kell (pl. a cikk címét is itt érdemes beállítani
- legyen státuszjelző, sikeres volt-e a lekérés, esetleges hibaüzenet, stb.
4.) kliensoldalon az előző lekérésnek a callback-jében (!!) vizsgálod, sikeres volt-e a lekérés, ha nem, megjelenítesz valami felhasználóbarát üzenetet (érdemes ezt is egyébként szerveroldalon beállítani, ne a kliensoldalra bízd! - de természetesen azt is kell kezelned kliensoldalon, ha már eleve a szervertől nem kaptál vissza adatot, de ez egy error callback-ben történik, nem pedig a success callback-ben), eltünteted a töltődést jelző divet, animálgatsz, amit akarsz, és betöltöd a megfelelő divbe a tartalmat, valamint az oldalszámokat (aktuális/összes), beállítod az új oldalcímet, mindezt a JSON-adatból kinyerve.
A lényeg, hogy a JSON-adatból mindenféle fontos információ kinyerhető legyen, tehát ezeket már eleve szerveroldalon állítsd be, hogy kliensoldalon aztán tök egyszerű legyen vele dolgozni. -
trisztan94
őstag
válasz
Sk8erPeter #1961 üzenetére
Hát valami olyasmire gondoltam, hogy ugye a TutorialsSlideDown DIV beanimálódik, oda 9 képet töltök be az első ajax kéréssel, majd, ha több van kiírja a lapozót (.TutorialsPagination). Amikor lapoztatunk egy elcsúszás animációra gondoltam és akkor ajaxxal (a belsővel) betöltjük a következő x (x<=9) képet.
Na, remélem érthetően leírtam, ha nem, csinálok róla egy vidit (vagy esetleg egy példát)
-
Sk8erPeter
nagyúr
válasz
trisztan94 #1960 üzenetére
Egész konkrétan amúgy hogy szeretnéd az egészet megvalósítani, hogy nézzen ki? Nem néztem végig a kódodat, csak ez egyből feltűnt.
-
trisztan94
őstag
válasz
Sk8erPeter #1959 üzenetére
Emiatt a callback miatt nem? Azért írtam így, hogy csak akkor kezdje el nézni, hogy van-e click event a .TutorialsPagination miután végbement az animáció, de ezek szerint nem jól gondolkodtam. Köszi, hogy felhívtad rá a figyelmem!
-
Sk8erPeter
nagyúr
válasz
trisztan94 #1958 üzenetére
Ja. De csak egy lehetséges megvalósítás a sok közül. De az eredeti koncepció rossz.
-
trisztan94
őstag
válasz
Sk8erPeter #1957 üzenetére
Mármint mi függjön data attribútumtól? Hogy hanyadik oldalra lép?
-
Sk8erPeter
nagyúr
válasz
trisztan94 #1956 üzenetére
kódodból:
$('.TutorialsSlideDown').slideDown(400, function () {
$('.TutorialsPagination').bind('click', function () {
//ajax kérés a lapoztatásra
$.post("Action/TutorialsPagination.cshtml",
{
page: 2
},
function (data) {
$('.TutorialsSlideDown').html(data);
alert(data);
});
//ajax kérés vége
});
});eleve rossz a koncepció. A slideDown callback-jében írod meg, hogy a .TutorialsPagination class-szal ellátott elem event handlere a click eseményre ezt meg azt csinálja... nem jó. Minden lapozáskor ezt megcsinálod. Szedd külön, az event handler a click-re eleve az elején legyen már rákötve, és valami data-attribútumtól, vagy globális változótól függjön (inkább előbbi!).
A koncepciót alakítsd át. -
trisztan94
őstag
Sziasztok!
Egy viszonylag nagy függvényem van, mellyel megnyitok egy divet, ajaxxal beletöltök tartalmat. Ezt szeretném lapoztatni, viszont a legbelső ajax tartalma nem jön vissza. A szerveroldali kód lefut.
Valami szintaktikai hibát vétettem, esetleg valami nem engedi lefutni? Nem jelez hibát a netbeans.function openTutorials(title, ClickedCategory) {
$('.TutorialsSlideDown').html("<div class='loading'><img src='Images/ajax-loader.gif' alt='Beöltés...'/></div>")
//ajax kérés
$.post("Action/LoadTutorials.cshtml",
{
category: ClickedCategory
},
function (data) {
$('.TutorialsSlideDown').html(data);
});
//ajax kérés vége
//DIV megjelenítése
$('.tutorial_listing').slideUp(400);
$('.TutorialsSlideDown').slideDown(400, function () {
$('.TutorialsPagination').bind('click', function () {
//ajax kérés a lapoztatásra
$.post("Action/TutorialsPagination.cshtml",
{
page: 2
},
function (data) {
$('.TutorialsSlideDown').html(data);
alert(data);
});
//ajax kérés vége
});
});
$('#PageTitle').html(title);
//Megjelent a DIV
$('.GoBack').bind('click', function () {
$('.TutorialsSlideDown').slideUp(400);
$('.tutorial_listing').slideDown(400, function () {
$('.TutorialsSlideDown').html("");
});
$('#PageTitle').html("Tutorialok");
});
return false;
} -
martonx
veterán
válasz
Speeedfire #1953 üzenetére
gondolom a php-nak nem sikerült szabványos json-né konvertálnia a shell scripttől kapott izét, így a jquery-nek sem sikerül ezt a kapott izét jsonná parse-olnia.
-
Speeedfire
félisten
Lehet én vagyok ismét a hülye, de ha megadom az ajax-nak, hogy a dataType json, akkor miért text jön vissza?
Elvileg a php oldalon json-t ad vissza. Viszont az sem egyszerű eset...alapból a shell script ilyen stringet ad vissza.php oldal:
$tomb = shell_exec('luci-bwc -i eth0.2 2>/dev/null');
return json_encode(json_decode('['.$tomb.']'));function savszelek() {
$.ajax({
url: 'lekerdez.php',
type: 'GET',
data: {
inout: 1
},
dataType : 'json',
success: function(data) {
savszel_szamol(data);
}
});
}
function savszel_szamol(data) {
var TIME = 0;
var RXB = 1;
var TXB = 3;
var data_stamp = 0;
var data_rx = [ ];
var data_tx = [ ];
for (var i = data_stamp ? 0 : 1; i < data.length; i++)
{
/* skip overlapping entries */
if (data[i][TIME] <= data_stamp)
continue;
/* normalize difference against time interval */
if (i > 0)
{
var time_delta = data[i][TIME] - data[i - 1][TIME];
if (time_delta)
{
data_rx.push((data[i][RXB] - data[i - 1][RXB]) / time_delta);
data_tx.push((data[i][TXB] - data[i - 1][TXB]) / time_delta);
}
}
}
$('.savszel').removeClass('porog');
$('.szavszel.input').html(data_rx);
$('.szavszel.output').html(data_tx);
} -
martonx
veterán
válasz
trisztan94 #1951 üzenetére
Neked is csak azt tudom mondani, hogy nem szégyen jquery dokumentációt olvasni:
"As of jQuery 1.7, the .on() method is the preferred method for attaching event handlers to a document. For earlier versions, the .bind() method is used for attaching an event handler directly to elements. Handlers are attached to the currently selected elements in the jQuery object, so those elements must exist at the point the call to .bind() occurs. For more flexible event binding, see the discussion of event delegation in .on() or .delegate()." -
-
martonx
veterán
Idézek: "As of jQuery 1.7, .delegate() has been superseded by the .on() method. For earlier versions, however, it remains the most effective means to use event delegation. More information on event binding and delegation is in the .on() method." - oké nem írták ki, hogy deprecated, de azért aki tudja is értelmezni azt ami ide van írva, nem fog csodálkozni rajta, ha egyszercsak kompletten kivezetik.
A kérdésedre a megoldás az, hogy olyan elemre kötöd az .on-t, ami biztosan létezik. Ez legvégső esetben a document tud lenni.
-
SaNyEe
aktív tag
válasz
martonx #1948 üzenetére
miért is deprecated?
Másfelől az on()-t nem használhatom a jelen helyzetben, ha jól értelmezem a dokumentációját."Event handlers are bound only to the currently selected elements; they must exist on the page at the time your code makes the call to .on(). To ensure the elements are present and can be selected, perform event binding inside a document ready handler for elements that are in the HTML markup on the page. If new HTML is being injected into the page, select the elements and attach event handlers after the new HTML is placed into the page. Or, use delegated events to attach an event handler, as described next.". Forrás:
Hogy használhatnám a jelen helyzetben az on()-t?
-
SaNyEe
aktív tag
Sziasztok,
A delegate funkciót kellene használnom, eddig a deprecated live-t használtam.
$('button[ftype|="mod"]').live('click',function(){});
Ez áll rendelkezésre html fronton document.ready() idején
<table>
<tr rId="1"><td>valami1</td></tr>
<tr rId="2"><td>valami2</td></tr>
</table>később jquery.append()-el hozzáadok egy újabb sort:
<tr rId="3"><td>valami3<button fType="mod">módosítás</button></td></tr>Delegate-t amikor használnám, a button-hoz legközelebb eső parentet kellene kijelölnöm, ami a <tr rId="3">, ami ugye nem állt rendelkezésre amikor a ready() lefutott. így a delegate sem ér semmit.
Mi lenne a helyes megoldás?
-
Sk8erPeter
nagyúr
Objektumegyenlőségek vizsgálatával kapcsolatban itt van egy topic:
http://stackoverflow.com/questions/1068834/object-comparison-in-javascriptHozzáteszem, az elfogadott válaszban iszonyat nagy gyökérség, hogy ennyiszer megy végig az objektumon. Már eleve azzal megduplázza a futási időt, hogy egyszer végigmegy rajta, megnézi, van-e undefined kulcs a másikban, aztán végigmegy még egyszer...
-
Jim-Y
veterán
var myobj1 = {
name: "obj1",
author: "author1"
}
var myobj2 = {};
var anarray = [];
anarray.push(myobj1);
if ( !Array.prototype.contains ) {
Array.prototype.contains = function(obj) {
for(var i=0;i<this.length;++i){
if(this[i] === obj){
return true;
}
}
return false;
}
}
var myotherobj = myobj1;
console.log(anarray.contains(myobj1)); //true
console.log(anarray.contains(myotherobj)); // true
console.log(anarray.contains(myobj2)); //falsesajnos ez még nem olyan jó, mert ha új attribútumot adunk pl myotherobj-nek akkor is igazzal tér vissza, gondolom referenciákat néz a === objektumok esetén és típust.
Szerintem a jó megoldás az lenne, ha összevetné az ember a típusokat, objektumok számát, értékét, esetleg a prototype chain egyezőséget is vizsgálna.
Vagy ahogy martonx is írta már alapból felkészítjük az objektumokat egy id-vel.
-
martonx
veterán
válasz
Sk8erPeter #1940 üzenetére
bocs, akkor félreértettem, számomra egy string is objektum, de akkor valószínűleg komplex objektumra gondolhatott?
Ez esetben valóban nem lehet for ciklus nélkül megúszni. Hogy kedvezzünk Jim-Y prototipizálási kedvének itt egy prototipizálásos megoldás erre, ami mondjuk a komplex objektum Id-ja alapján ellenőriz, hogy van-e ilyen objektum a tömbben:Array.prototype.indexOfId = function(id) {
for (var i = 0; i < this.length; i++)
if (this[i].id === id)
return i;
return -1;
}
var arrayName = [
{ id: "a", gender: "man", item: "stuff" },
{ id: "b", gender: "woman", item: "stuff" },
{ id: "c", gender: "man", item: "stuff" },
{ id: "d", gender: "man", item: "stuff" }];
var position = arrayName.indexOfId("b");
alert(position); -
Muton
addikt
válasz
Sk8erPeter #1937 üzenetére
ellenőrizve meg van már, csak gondoltam hátha szebb (direkt erre való gyári) megoldás is van, de akkor úgy vélem, hogy nincs. amúgy nem gond. köszönöm!
-
Sk8erPeter
nagyúr
Lefuttathatsz keresést előtte egy sima ciklussal, ha van valami azonosító az objektumon belül, hogy van-e már ilyen, ha igen, visszatérsz a függvényből. Vagy ha már jQuery topic, van ilyen módszer is, $.grep: http://stackoverflow.com/questions/7364150/find-object-by-id-in-array-of-javascript-objects/7364307#7364307
De mondom, mezei saját JS-függvényt is írhatsz erre gyorsan. -
Muton
addikt
Heló!
Van valami direkt függvény a push helyett arra, hogy egy objektumot ne tudjak egy tömbhöz hozzáadni többször?
-
Polesz
addikt
válasz
Sk8erPeter #1934 üzenetére
Ha meg van az alapja akkor rakok fel képet mire is gondoltam oly erősen
-
Polesz
addikt
válasz
Sk8erPeter #1932 üzenetére
Igen hasonlóra. Köszönöm a segítséged, közben a jquery-ui dialog résznél találtam jó példát amit kicsit átpofozok és jó is lesz ezzel kombinálva.
Very big thx!
-
Polesz
addikt
válasz
Sk8erPeter #1929 üzenetére
A lényeg hogy magát az űrlapot szeretném ilyen kattingatósra összerakni, a keresés és a többi az nem gond, csak szép felületet akarok ehhez kreálni, hogy lehessen feltételt hozzáadni/elvenni.
Bocsánat ha zavarosan fogalmazok, közben eldőlt a szerver is
-
Polesz
addikt
Üdvözlet a mestereknek!
Az lenne a kérdésem hogyan lehetne megcsinálni hogy többszörös feltételeket tudjak létrehozni PHP/Jquery alapokon.
A terv:
valami egyenlő ezzel és +
másik nemegyenlő azzal vagy +
dátum kisebbmint 20130306Előre is köszönöm ha ennyiből meg tudjátok állapítani mit is szeretnék, ha van valahol elérhető egyszerű példa akkor már összepatkolom a megoldást, de egyelőre semmit se találtam erről.
-
Karma
félisten
válasz
trisztan94 #1923 üzenetére
Screenshot téma: ez esetben Javascript oldalról kizárt.
Viszont ha megnézed a Jing oldalát, ott is embeddálnak screencastot előképpel. Az oldal forrását megnézve ezt találtam:
<object type="application/x-shockwave-flash" id="tscplayer" name="tscplayer" align="middle" data="http://www.techsmith.com/includes/tsc_player.swf" width="100%" height="100%">
<param name="quality" value="high">
<param name="bgcolor" value="#000000">
<param name="allowscriptaccess" value="always">
<param name="allowfullscreen" value="true">
<param name="wmode" value="direct">
<param name="allowNetworking" value="all">
<param name="flashvars" value="src=http://assets.techsmith.com/Videos/ua-tutorials-jing/screencast-embed.mp4&debugHotspots=false&poster=http://assets.techsmith.com/Videos/ua-tutorials-jing/screencast-embed.png&authoredLanguage=default&customEventTracking=true&customEventJSCallback=onCustomEvent&altEventCategoryAsFilename=true&altLoadTimeAsSeconds=true&debugUI=false&advancedSeeking=false&enforceLinearAssessments=true&scormComplete=false&hostingPage=http://www.techsmith.com/videoframe.aspx?mp4=http://assets.techsmith.com/Videos/ua-tutorials-jing/screencast-embed.mp4&webm=http://assets.techsmith.com/Videos/ua-tutorials-jing/screencast-embed.webm&xml=&png=http://assets.techsmith.com/Videos/ua-tutorials-jing/screencast-embed.png&autoplay=false&disablefullframe=false&title=screencast-embed.mp4">
</object>Kiemeltem, de külön is: a flashVarsban bead egy olyan paramétert, hogy poster és egy png változó, benne egy URL-lel ami az előnézeti képre mutat.
Bár szerintem ezt magától is ki tudja generálni a program (sose használtam), kézzel is hákolhatod ha gondolod.
-
trisztan94
őstag
válasz
Sk8erPeter #1924 üzenetére
Így mar tökéletesen megy, köszönöm !
-
Sk8erPeter
nagyúr
válasz
trisztan94 #1923 üzenetére
Most nem értem, melyik a kérdés, hogy lehet-e az egészen gyorsítani, vagy hogy ne slideDown-oljon addig, amíg be nem fejeződött a szerveroldallal a kommunikáció?
Nyilván gyorsítani a szerveroldali kommunikáción úgy lehet, hogy megoldod, hogy gyorsabban adjon választ a szervered.
Azt meg, hogy csak az eredmények tényleges megérkezésekor legyen slideDown, úgy tudod megoldani, hogy a callback-be rakod bele a slideDown-t, nem az aszinkron híváson kívülre.
Tehát pl.
...
$.post("Action/LoadTutorials.cshtml", { category: ClickedCategory },
function (data) {
$('.TutorialsSlideDown').html(data);
//DIV megjelenítése
$('.tutorial_listing').slideUp(400);
$('.TutorialsSlideDown').slideDown(400);
});
//ajax kérés vége
... -
trisztan94
őstag
Ez nem animáció, egy sima jing-el készített screencast. Így lehetséges?
Más:
Van pár kép az oldalamon, kattinthatók. Mindegyiken van egy kategória data attribútum. Aszerint, hogy melyikre kattintunk egy külső scriptet betöltök $.post-tal, ami adatbázisból kiszedi azokat az értékeket amik megfelelnek a kategóriának, visszaküldi és beírom az adatokat egy div-be.
A probléma: Ez egy slideUp-oló div, miután végigment az animáció kb 2mp kell neki mire bejönnek a dolgok. Lehet ezt valahogy gyorsítani?HTML:
<div class="tutorial_listing">
<img data-category="1" id="PhpTutorials" src="~/Images/PHP.png">
<img data-category="2" id="foobar" src="foo/bar">
</div>
<div class="TutorialsSlideDown container_12"></div>Eddig semmi ördöngőség, ott van ugye két kép egy container divben, mindkettő ellátva egy data attribútummal és egy üres div.
Itt a jQuery ami beanimálja a dolgot. A lényege annyi, hogy a tutorial_listing divet eltűnteti, ezzel egyidőben a TutorialsSlideDown divet behozza.function openTutorials(title, ClickedCategory) {
//ajax kérés
$.post("Action/LoadTutorials.cshtml",
{
category: ClickedCategory
},
function (data) {
$('.TutorialsSlideDown').html(data);
});
//ajax kérés vége
//DIV megjelenítése
$('.tutorial_listing').slideUp(400);
$('.TutorialsSlideDown').slideDown(400);
$('#PageTitle').html(title);
$('.GoBack').bind('click', function () {
$('.TutorialsSlideDown').slideUp(400);
$('.tutorial_listing').slideDown(400);
//ha bezárjuk a divet kiürítjük a tartalmát
$('.TutorialsSlideDown').html("");
$('#PageTitle').html("Tutorialok");
});
return false;
}
Tehát: Beanimálódik a div és kb csak 2-3 mp múlva jelennek meg az adatok. -
Karma
félisten
válasz
trisztan94 #1921 üzenetére
Ez csak akkor lehetséges, ha a Flash fájlt is te írod, és definiálsz hozzá egy külső interfészt. Ezt meghívva a Flash kód legenerálja a screenshotot, majd átadja a JavaScriptnek.
Más megoldás a böngésző alapelvei miatt nem lehetséges.
Ha nem SWF objektumod lenne, hanem egy HTML5 canvasra rajzolnál, na az le tudja generálni az aktuális állapotát képként.
-
trisztan94
őstag
Sziasztok!
.swf fájlból szeretném az első képkockát képként lementeni, majd thumnailként használni. Van erre valami plugin, esetleg tudja alapból a jQuery? -
kkdesign
senior tag
Üdv, Jquerys galériákat keresek, de eddig nem találtam meg ami nekem kell, olyan kellene hogy tudjon mappákat, ls belelépve legyen valamiképp liveboxba a kép vagy valami ilyesféle megoldás. a Képmegjelentés már másodlagos, a lényeg, hogy albumokat lehessen elkülöníteni. Tud valaki ötletet hogy hol találok ilyent ?
-
Jim-Y
veterán
A hiba az ön készülékében van, ugyanis kiveszi az, ahogy kell neki, az más kérdés, hogy rossz helyre raktad a sort, ugyanis ebben a formában a js akkor olvassa ki az input értékét (document.ready), amikor még nincs benne semmi. Rakd a click-en belülre, és akkor jó lesz.
Szemléltetésül:
var v = $("#user").val();
$('#kell').click(function(){
alert("bökd "+typeof(v)+" ki"); // bökd string ki : itt string egy üres stringet jelöl, de! nem undefined
});Működő példa: http://jsfiddle.net/Jim_Y/WAHkn/
-
Lacces
őstag
válasz
Sk8erPeter #1916 üzenetére
Mester, a formos jó... megjegyzem e nevet
Láttam valahol, hogy ott sem használtak value értéket...
De ez mind szép és jó, de nekem lehet nem a val() metódus kell
#kell
<input id="kell" type="button" value="kell"/>Szóval nekem az kellene, hogy amikor a #kell id-s gombra kattint, akkor a #user textbox-ba beírt szöveget kiszedje (ne pedig annak value attribútomát).
-
Lacces
őstag
Plusz még lenne egy. Az a baj, hogy hozzászoktam a keretrendszer nyújtotta kényelemhez, és az ajax / jquery most teljesen halál nálam.
a 'user' id-val rendelkező input-nál miért nem veszi ki az értéket?
<input id="user" type="text" name="User" />
<script type="text/javascript">
$(document).ready(function(){
var v = $('#user').val();
$('#kell').click(function(){
alert("bökd "+v+" ki");
});
});
</script> -
Lacces
őstag
Sziasztok,
Hogyan tudnám pontosan elérni, hogy a egy form-on belül ajaxxal eltudja küldnei a Post tömböt?
A lenti kódnál, megpróbáltam, de ott valamiért üres POST-ot küld el a szervernek... test metódusnak.
<form method="post">
<div class="row">
<label for="User">Name</label>
<input id="User" type="text" name="User" value="" />
</div>
<input id="ajax" type="button" onclick="ajaxhivas()" value="AJAX"/>
</form>
<script type="text/javascript">
function ajaxhivas(){
$.ajax({
type : 'POST',
url : 'test',
dataType : 'json',
success : function(data){
alert("Az adat itt is van: "+data);
}
});
}
$(document).ready(function(){
});
</script> -
Karma
félisten
válasz
martonx #1909 üzenetére
Ha van alternatívád, azaz egy olyan ennél könnyebb (méretű) library, ami megoldja nekem az oldalakra tagolást és az azok közötti navigációt, akkor szívesen kidobom a JQM-et, mert tényleg nem használok ennél (meg az alap controlokon túl) semmit belőle. Tudnék újat írni, de nem akarok, mert csak.
Ahogy spekuláltad, a natív app saját és ennek így is kell maradnia. A feladat egyébként jól meghatározott, és pont ez a félnatív hibrid megoldás van a legközelebb az igényekhez. Ettől nem fogunk eltérni.
Egyébként meg megoldottam.
Az egyik dolog az Android oldalán volt: Jelly Beantől kezdve szigorúbb a WebView a file:// protokollal szemben (AllowUniversalAccessFromFileURLs default false, korábban true volt és nem is lehetett állítani). Egy SDK szint check, és máris ugyanúgy viselkedik az ICS és a JB.
A másik meg, hogy ha a jQM changePage-et string cél helyett DOM elementtel hívom meg, akkor nem kezd AJAX-olni, hanem teszi a dolgát. Ehhez mondjuk GitHubon el kellett olvasnom, mit is csinál ez a függvény.
-
martonx
veterán
Ezzel nem leszel előrébb, de miért nem dobjátok bele egy phonegap app-ba? Ja, bár gondolom adott eleve egy natív alkalmazás, így adott a saját webview, és ennek csak egy részét írnátok meg html-ben. Akkor az ötletem tárgytalan.
És ezzel sem leszel előrébb, de hiába van ott a nevében, hogy mobile, szvsz eléggé öngól pont mobilra, pont böszme nagy js libeket használni. -
Karma
félisten
Tegnap nekem is megvolt az első jQuery Mobile-os anyázásom. Mivel még nem jöttem rá a megoldásra, bármilyen ötletet szívesen vennék.
Adott egy nagyon egyszerű multipage oldal, amin belül hreffel szeretnék navigálni. Ez nagyon jól működik böngészőben, sőt amíg webszerver szolgálja ki, Androidon WebViewban is.
A baj az, hogy a feladat lokálisan tárolni és onnan futtatni a webappot file:// protokollal. Ebben az esetben az anchorokra kattintva egy nagy sárga Error loading page hibát jelenít meg, és ennyi...
Azt megfigyeltem, hogy http:// esetén az anchorok frissítik az URL-ben a hasht, míg lokálisan a WebViewban ez nem történik meg.
A hashre egyébként nincs szükségem, nem támogatjuk a visszalépést az oldalak között, úgyhogy a teljes history támogatás felesleges. Nekem annyi kéne, hogy animálja a divek közötti váltást, és kész.
Próbálkoztam a globális konfigurációban letiltani az AJAXot, a hashchangelistenert, meg valami harmadikat (még nem értem be dolgozni, fejből meg nem megy), de nem értem el javulást. Az egyetlen friss ötletem az anchorok navigációjának letiltása (van rá config), majd kézzel hívogatom a $.mobile.changePage-et, a changeHash opcióval. De ennél kell lennie jobb megoldásnak szerintem, hiszen a PhoneGap így működik valahogy...
Csak az összes példa, amit találok, single page template.
-
trisztan94
őstag
válasz
fordfairlane #1897 üzenetére
+ Sk8erpeter
Köszönöm a segítséget! Természetesen tudom, hogy meg nagyon sok tanulni valóm van, sok fogalmat rosszul ertelmezek, nagy segítség, hogy kijavitotok, mondjátok a jobb kódot.
Bár már elég sokat fejlődtem azóta mióta kezdtem, még mindig vannak hiányosságok melyeket pótolni kell
Martonx: igazad van, tényleg jó volt a kód, valami baja volt az internet explorerrel (ügyfél kérte, hogy legyen optimizalva rá .. )Amúgy bocsi, hogy csak most reagalok, sok dolog történt mostanában, jelenleg vonaton ülök, megyek fél évet cserediakkent Norvégiába
Természetesen reagálok majd normálisan mindenre ha odaértem
-
martonx
veterán
válasz
Peter Kiss #1904 üzenetére
Nem biztos, hogy egyenes arányban függ össze, de pusztán az 1.9-es jquery után 46 bugreport jelent meg. Nem néztem őket végig, nem biztos, hogy mindet a háttér jquery verzió váltás okozta, de azért ez nem kevés.
Miből gondolod a jquery.validation-t nem frissítettem? Írtam, hogy jquery-t és minden kapcsolódó libet frissítettem. Jó nem részleteztem ki, hogy ezt erről erre, meg azt arról arra.
Az unobtrusive pedig ahogy te is írtad 3 hete lett jelezve, hogy nem jó. Amikor 3 hét alatt nem voltak képesek kijavítani 3 sornyi kódot a 100-ból (persze lehet még benne más hiba is, nekem eddig 3 helyen kellett belenyúlni), miközben pont a Connecten jeleztük, hogy melyek azok a sorok, amik hibásak, akkor ott túl sok jóra én nem számítanék.
-
Peter Kiss
őstag
válasz
martonx #1903 üzenetére
Nem látom ezt a rengeteg 1.10-es bug reportot.
jQuery.Validation javítva lett már, 1.11-est kell használni. A jQuery.Validation.Unobtrusive nem működik rendesen, a problémák egy részén segít a jQuery Migrate, de úgyis ki lesz javítva minden (kb. 3 hete jelezték Connect-en is a problémákat).
-
martonx
veterán
válasz
Sk8erPeter #1901 üzenetére
Ja és a legviccesebbet nem is mondtam. Jquery UI. Kismillió helyen átírták a widget-jeiket. De nem dokumentáltan, áááá dehogy.
Nézzétek meg az 1.10-es Jquery UI bugreportokat. Vicces, vagy inkább tragikus.
Ráadásul megcsinálták a szép új Jquery egyenportálokat, csak éppen hehehe a Jquery UI-on az 1.9-es source kódok vannak a demóknál. Saccra a Jquery UI-os demó példa kódok jelentős része abszolút nem működik az aktuális 1.10-es Jquery UI verzióval. -
martonx
veterán
válasz
Sk8erPeter #1901 üzenetére
Konkértan a jquery validate-tel szívtam, meg az unobtrusive validate-el. A validate "hivatalos" jquery plugin, az unobtrusive meg hivatalos Microsoft plugin. És igen, szerintem sem szép, hogy beléjük kellett nyúlni.
-
Sk8erPeter
nagyúr
válasz
martonx #1898 üzenetére
"Valójában semmilyen előnyöm nem származott az átállásból."
Megérte.Akkor most végül is jól értem, hogy a felhasznált egyéb pluginekbe is bele kellett tákolni amiatt, hogy kompatibilisek legyenek az új verzióval? Mert az sem túl szép dolog.
Egyébként pl. Drupalnál úgy oldják meg, hogy nem szoktak jQuery-váltások lenni, csak major Drupal-verzióváltáskor. Van jQuery Update, ami kicsit frissebb verziót rak fel, és ami agyontesztelt mindenféle beépített dologra, de contrib moduloknál még ez sem biztos, hogy szerencsés, mert okozhat problémát, bár ez ritka. Drupalnál pont azért nem váltanak, mert sok hibalehetőség van abból, hogy frissebb jQuery-verziót szeretne valaki használni. Ez persze nagyon új plugineknél szívás is, de megvan az előnye is (az inkompatibilitási parák elkerülése).
Amúgy milyen pluginekkel szívtál, amelyek nagyon nem voltak hajlandók működni az új verzióval?
Új hozzászólás Aktív témák
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- One mobilszolgáltatások
- Hivatalos a One UI 8 frissítés közzététele
- A 3D V-Cache és a rengeteg memória lehet az új PlayStation fő fejlesztési iránya
- Épített vízhűtés (nem kompakt) topic
- TCL LCD és LED TV-k
- Gyúrósok ide!
- Házimozi belépő szinten
- Intel Core i5 / i7 / i9 "Alder Lake-Raptor Lake/Refresh" (LGA1700)
- Proxmox VE
- További aktív témák...
- GYÖNYÖRŰ iPhone 13 Pro 256GB Sierra Blue -1 ÉV GARANCIA - Kártyafüggetlen, MS3358
- ÁRGARANCIA!Épített KomPhone i5 10400F 16/32GB RAM RX 7600 8GB GAMER PC termékbeszámítással
- AKCIÓ! Asus ROG Flow Z13 +ROG XG RTX 3070- i9 12900H 16GB DDR5 1TB SSD RTX 3050Ti 4GB + RTX 3070 W11
- Bomba ár! Dell Latitude 7320 - i5-11GEN I 8-16GB I 256-512SSD I HDMI I 13,3" FHD I Cam I W11 I Gari!
- LG 27GP850P-B - 27" NANO IPS - 2560x1440 - 180Hz 1ms - NVIDIA G-Sync - AMD FreeSync - HDR 400
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft.
Város: Budapest