Hirdetés

2014. július 24., csütörtök

Útvonal

Fórumok  »  Szoftverfejlesztés  »  jQuery topic

Hozzászólások

(#151) Athlon64+ válasza jeges (#149) üzenetére


Athlon64+
(senior tag)
LOGOUT blog

A .bind() nem delegál eseményt, csak a .live() és a .delegate() tudja ezt, legalábbis az én értelmezésemben. Delegálni akkor szoktunk, mikor még nem érhető el az adott elem a contextben. Azt is hozzátenném, hogy a .click() és hasonlók helyett érdemesebb a .live()-ot használni (ha lehet [pl. traversal metódusokat nem lehet használni arra, hogy elemeket keressünk a .live()-nak]), mert gyorsabb, viszont a .live() helyett meg jobb a .delegate() szintén a sebesség miatt, csak utóbbit néha körülményes használni.

---


Speeedfire

Szerintem ez a kód azt csinálja, mint a tiéd, csak rövidebben és gyorsabban.

$(document).ready(function() {
$(".hiremail").focus(function () {
$(this).val('').css('color', '#000').css('border-color', 'green');
})
.blur(function () {
var t = $(this);
if (t.val() == ''){
t.val('email cím...');
}
t.css('color', '#777').css('border-color', '#EEE');
});
});

[ Szerkesztve ]

MCTS: .NET Framework 4, Web applications | <?php die('hard'); ?>

(#152) jeges válasza Athlon64+ (#151) üzenetére


jeges
(senior tag)

a magam részéről kicsit általánosabban a bubbling kihasználását értem alatta, azaz hogy nem a célelemen fogom meg az eseményt, hanem a szülőjén. ettől lesz kezelhetőbb, gyorsabb az egész (pl. egy néhányszáz soros rácson ha minden cellára listenert raksz, az baromi lassú, míg egyetlen listenerrel a tábla elemen ugyanaz a hatás elérhető).

szerk: most, h előkerült utánanéztem, és valóban a jq-sok megkülönböztetik a rebinding-et a delegation-től, ahgy Te is írtad.

[ Szerkesztve ]

"...cos if i go out drinkin', then i can stop thinkin', how the world done me wrong"

(#153) Athlon64+ válasza jeges (#152) üzenetére


Athlon64+
(senior tag)
LOGOUT blog

Ha minden jól össze van állva bennem, akkor pontosan ezt (táblás) valósítja meg a .delegate(). A táblához kötöm, de a .delegate() selector paraméterébe a td-ket rakom például.

MCTS: .NET Framework 4, Web applications | <?php die('hard'); ?>

(#154) jeges válasza Athlon64+ (#153) üzenetére


jeges
(senior tag)

erre jó bármelyik másik eseménykezelő eljárás is. ha jq nélkül, simán js-ben definiálsz egy .onclick függvényt, az is el fogja kapni az elem gyerekeinek a click-jeit (hacsak nem akadályozod meg külön a programkódban). erre az "elkapásra" írtam fent példát.

"...cos if i go out drinkin', then i can stop thinkin', how the world done me wrong"

(#155) Brown ügynök


Brown ügynök
(senior tag)

A képen látható body-ba szeretnék tartalmat írni jQueryvel:

(IMG:/dl/upc/2011-08/306549_paste.thumb.png)(/IMG)

Ezekkel próbálkoztam, de nem ment:

$("#cke_contents_editor").children('body').html(sablon);
$(".cke_show_borders").html(sablon);

[ Szerkesztve ]

"hacsak nem jön a jó tündér break utasítás képében..."

(#156) jeges válasza Brown ügynök (#155) üzenetére


jeges
(senior tag)

[link]

"...cos if i go out drinkin', then i can stop thinkin', how the world done me wrong"

(#157) Athlon64+ válasza Brown ügynök (#155) üzenetére


Athlon64+
(senior tag)
LOGOUT blog

$('iframe').first().contents().find('body').append('<img src="' + elem + '"/>');

Így használom (majdnem) egy CKEditor-nál képbeszúrásra.

[ Szerkesztve ]

MCTS: .NET Framework 4, Web applications | <?php die('hard'); ?>

(#158) Brown ügynök


Brown ügynök
(senior tag)

Köszi mindkettőtöknek. :)

"hacsak nem jön a jó tündér break utasítás képében..."

(#159) Speeedfire


Speeedfire
(PH! nagyúr)
LOGOUT blog

Kis jquery gondok van, a neten találtam egy egyszerű jquery kódot a lenyíló menünek. Viszont nem működik megfelelően.

$(document).ready(function(){
$('.dropdown').mouseenter(function(){
$('.sublinks').stop(false, true).hide();

var submenu = $(this).parent().next();

submenu.css({
position:'absolute',
top: $(this).offset().top + $(this).height() + 'px',
left: $(this).offset().left + 'px',
zIndex:1000
});

submenu.stop().slideDown(300);

submenu.mouseleave(function(){
$(this).slideUp(300);
});
});
});

Valami miatt nem jó helyen jeleníti meg a lenyílő füleket. Jelenleg kicsit belenyúltam a top és a left definiálásánál, de így csak hd felbontásban van jó helyen. Hogy lehetne megoldani, hogy a megfelelő helyen jelenjen meg?
[A teszt oldal]

Illetve ha lenyílik a menü akkor jobbra is elmozdul még, de ezt nem is értem, hogy miért mert a jquery-ben nincs ez deklarálva.

Weblapom http://goo.gl/q0VKN || Linkkatalógusom http://goo.gl/91Qs4

(#160) martonx válasza Speeedfire (#159) üzenetére


martonx
(őstag)

Ha az Ügyfeleinknek, és a Leendő Ügyfeleinknek menük lenyílására gondolsz FF6 alatt teljesen szépen működnek.
Nem valami böngésző specifikus probléma lesz itt?

HOPPÁ!

(#161) martonx válasza martonx (#160) üzenetére


martonx
(őstag)

bár az is igaz, hogy pont HD felbontásban néztem...

HOPPÁ!

(#162) Speeedfire válasza martonx (#161) üzenetére


Speeedfire
(PH! nagyúr)
LOGOUT blog

Chrome alatt tesztelgetem, de pl ie alatt már ugyanebben a felbontásban is gond van.
Próbáld meg azt hogy összehúzod az ablakot mondjuk fele akkorára. Már nem lesz jó. :(
Valami miatt, rosszul veszi fel a css adatokat.

Weblapom http://goo.gl/q0VKN || Linkkatalógusom http://goo.gl/91Qs4

(#163) Athlon64+ válasza Speeedfire (#162) üzenetére


Athlon64+
(senior tag)
LOGOUT blog

Az ilyen hibákra a megoldást az jelenti, he első körben eltünteted a JS kódot, és csak a CSS marad meg. Ha úgy okés, akkor utána lehet effektelni.

MCTS: .NET Framework 4, Web applications | <?php die('hard'); ?>

(#164) jeges válasza Speeedfire (#159) üzenetére


jeges
(senior tag)

nem merültem el nagyon a kódban, de számomra legalábbis meglepő az a megoldás, hogy a menüsoron minden li elemnek saját ul-ja van. biztos, hogy ez volt az elképzelés? első blikkre azt gondolnám, egy legördülő menünek egy ul-ban vannak li tagjai, és az almenük ezeken belül további ul, ill li tagok szoktak lenni. nagyjából így:

<ul>
<li><a></a></li>
<li><a></a></li>
<li><a></a></li>
</ul>

persze lehet, hogy én néztem el valamit.

a fenti ul-ok egyébként is valami miatt 0*0 pixelesek, ez sem biztos, hogy így kóser, de csak találgatok.

ennél mindenesetre láttam már egyszerűbb megoldást, számomra fura ez a plusz li tag beszúrás, mer' úgy tűnik, feleslegesen piszkálja a program a dom-ot.

"...cos if i go out drinkin', then i can stop thinkin', how the world done me wrong"

(#165) Speeedfire válasza Athlon64+ (#163) üzenetére


Speeedfire
(PH! nagyúr)
LOGOUT blog

De js nélkül nem is látom ezeket az elemeket. Nem tudom mi lenne az elegánsabb megoldás, ami praktikus is.


jeges: A forrás szerint mindegyik külön ul között van.

Weblapom http://goo.gl/q0VKN || Linkkatalógusom http://goo.gl/91Qs4

(#166) jeges válasza Speeedfire (#165) üzenetére


jeges
(senior tag)

hja, látom.
az viszont esetleg lehet válasz az elcsúszásra, hogy a te tesztoldaladon minden li a sor elején van, az eredetiben pedig sorban egymás után. a float:left hiányzik nálad, ettől sorakoznak fel egymás mellé a li tag-ek.

(azt továbbra sem értem, mi szükség erre a rengeteg ul-ra.)

"...cos if i go out drinkin', then i can stop thinkin', how the world done me wrong"

(#167) Speeedfire válasza jeges (#166) üzenetére


Speeedfire
(PH! nagyúr)
LOGOUT blog

A float-tal sem javult a helyzet. Te milyen megoldást ajánlanál a legördülő menüre? Lényegében csak működjön megfelelően, a többi nem érdekel már. :))

Weblapom http://goo.gl/q0VKN || Linkkatalógusom http://goo.gl/91Qs4

(#168) jeges válasza Speeedfire (#167) üzenetére


jeges
(senior tag)

én azt mondom, minél egyszerűbb, annál jobb. ha már működik, lehet vele figurázni (fent már írt hasonlót valaki). ez pl egyszerű de nagyszerű, nem köll hozzá js se, csak css. és ha működni fog, még mindig slide-olhatod a megfelelő elemeket.

"...cos if i go out drinkin', then i can stop thinkin', how the world done me wrong"

(#169) Brown ügynök


Brown ügynök
(senior tag)

Előzmény
Akkor folytassuk itt. :D

Itt hova tegyem a kódolást és mit használjak?

$('#cikkszam_s').keyup( function() {
if ( $('#cikkszam_s').val().length == 0) {
// Elrejtjük az ajánlást
$('#suggestions').hide();
} else {

var $cikkszam = $(this).val();
var $url = $("#searchAjaxProNum").val();

$.post($url, {cikkszam: $cikkszam},
function(data){
if(data.length > 0) {
$('#suggProduct').show();
$('#autoSuggProduct').html(data);
}
});
}
});

"hacsak nem jön a jó tündér break utasítás képében..."

(#170) Athlon64+ válasza Brown ügynök (#169) üzenetére


Athlon64+
(senior tag)
LOGOUT blog

Ha szerveroldalon tolsz ki header-ben kódolást, akkor azt módosítsd.
Ha a HTML <head> részében meg van adva a kódolás, módosítsd. (És máshol is, pl.: XML)
Az összes fájl (.htm, .html, .php, js, .css, miegymás) karakterkódolását állítsd át latin2-re UTF-8-ról (Notepad2, Notepad++).

Ennyi lenne.

MCTS: .NET Framework 4, Web applications | <?php die('hard'); ?>

(#171) Brown ügynök válasza Athlon64+ (#170) üzenetére


Brown ügynök
(senior tag)

Igen, de itt nem azt írja, hogy utf8-ban küldi az adatokat amit dekódolnom kell?

Data will always be transmitted to the server using UTF-8 charset; you must decode this appropriately on the server side.

[link]

"hacsak nem jön a jó tündér break utasítás képében..."

(#172) Athlon64+ válasza Brown ügynök (#171) üzenetére


Athlon64+
(senior tag)
LOGOUT blog

Ehh, valóban. :W
Erre marad megoldásnak az, hogy szerveroldalon beveted az iconv()-ot, vagy urlencode-olsz kliensoldalon, szerveren meg dekódolsz. (Ezzel is van egy kicsi probléma, iconv() ajánlottabb.)

Ettől függetlenül nem árthat megnézni a fentieket (önmagukban megoldást nem nyújtanak a problémádra sajnos), mert néha későn jön rá az ember, hogy valahol el van tolva a dolog.

Ami az ultimate megoldás lenne, az az adatbázis átborítása UTF-8-ba (meg minden másé). Nekem is azért nem volt szem előtt ez a jQuery "megjegyzés", mert weben már UTF-8 a menő, főleg a MySQL 5 óta (HUN collation).

MCTS: .NET Framework 4, Web applications | <?php die('hard'); ?>

(#173) jeges válasza Brown ügynök (#169) üzenetére


jeges
(senior tag)

milyen adatbázis? mennyire vannak a kezedben a beállítások?
(csak zárójelben: ez valami migrációs probléma?)

"...cos if i go out drinkin', then i can stop thinkin', how the world done me wrong"

(#174) Brown ügynök válasza Athlon64+ (#172) üzenetére


Brown ügynök
(senior tag)

Ez lenne a legegyszerűbb megoldás. De a probléma túl összetett. :D

Van egy Postgres adatbázis SQL-ASCII kódolással. Van egy vállalatirányítási rendszer Delphiben, és lenne egy egy E-busniess felület amit most csinálok. Nos, az adatbázist dumpolom LATIN9-be. Ezt beillesztem egy UTF8 adatbázisba és akkor nagyjából működika webes rész. Igen ám, de a Delphi nem szereti valamiért ezt az adatbázist: invalid byte sequence for encoding utf8.

Arra gondoltam, először megpróbálom webes oldalról megoldani, de lehet hogy a Delphiben kellene valamit csinálni.

@jeges: Az adatbázis a "kezemben" van. :D

"hacsak nem jön a jó tündér break utasítás képében..."

(#175) Brown ügynök


Brown ügynök
(senior tag)

A következő a felállás: Két értéket kell behelyezni az ajax által visszaadott válaszból. Azt szeretném, ha onblur hatására szépen lefutó fv. a sablonnevet is behelyezné az inputba, amit most valamiért nem tesz meg.

Ha a sablonnev üres, akkor nem bántaná az input mezőt (tehát a begépelt szöveg megmaradna), ellenben kitöltené a visszakapott értékkel. Ez mintha már működött volna, most leellenőriztem és nem rak be semmit. :O

<input onblur="fillTemplate();" id="template" />

function fillTemplate(sablon, sablonnev){

$('iframe').first().contents().find('body').append(sablon);

$val = $(sablonnev).val();

if ( $val == ""){
$("#template").val();
}
else{
$("#template").val($val);
}

setTimeout("$('.suggestions').hide();", 200);
}

"hacsak nem jön a jó tündér break utasítás képében..."

(#176) martonx válasza Brown ügynök (#175) üzenetére


martonx
(őstag)

F12 mit mutat?

HOPPÁ!

(#177) Athlon64+ válasza Brown ügynök (#175) üzenetére


Athlon64+
(senior tag)
LOGOUT blog

onblur-ra paraméter nélkül hívod meg a függvényt, miért is rakna be bármit is, ha mindkét paraméter undefinied?

Másik tipp:
$val = $(sablonnev).val();

if ( $val == ""){
$("#template").val();
}
else{
$("#template").val($val);
}

Helyett:
$("#template").val($(sablonnev).val());

MCTS: .NET Framework 4, Web applications | <?php die('hard'); ?>

(#178) jeges válasza Athlon64+ (#177) üzenetére


jeges
(senior tag)

ill még egy kieg:
sablonnev (csak számomra?) nem egyértelmű, h maga az input vagy egy változó. a válasz ill a felépítés függvényében kellhet elé a megfelelő kijelölő jel (# vagy .)

"...cos if i go out drinkin', then i can stop thinkin', how the world done me wrong"

(#179) Athlon64+ válasza jeges (#178) üzenetére


Athlon64+
(senior tag)
LOGOUT blog

:K
Esetleg lehetne meglévő object.

MCTS: .NET Framework 4, Web applications | <?php die('hard'); ?>

(#180) Brown ügynök válasza martonx (#176) üzenetére


Brown ügynök
(senior tag)

Nem jelez hibát.

@Athlon64++: Nem működik. Egyébként másik fv. esetében müködik a következő szisztéma: function fillTemplate(sablon, sablonnev){

$("#template").val(sablonnev);
}

@jeges: A sablon és a sablonnev a visszakapott adat, ergo a változó.

Szerk: $("#template").val(sablonnev); Ez idáig működik. Már csak azt szeretném, hogyha mégsem választ ki egy sablonnevet, a begépelt szöveg ne tűnjön el a sablonnév inputból.

[ Szerkesztve ]

"hacsak nem jön a jó tündér break utasítás képében..."

(#181) jeges válasza Brown ügynök (#180) üzenetére


jeges
(senior tag)

"hogyha mégsem választ ki egy sablonnevet, a begépelt szöveg ne tűnjön el a sablonnév inputból."

ha jól értem, a sablonnev inputot nem üríti a korábban írt kódrészleted, csak a template-et.

mindegy, sztem ez a három lehetőség van alapvetően:

1) ha a sablonnev változót vizsgálod:

if(sablonnev != undefined && sablonnev != "")$('#template').val(sablonnev);

2) ha a sablonnev id-jű inputot akarod vizsgálni:

if($('#sablonnev').val() != "")$('#template').val( $('#sablonnev').val() );

3) ha a sablonnev változóban tárolt id-jű inputot vizsgálod:

if($('#' + sablonnev).val() != "")$('#template').val( $('#' + sablonnev).val() );

"...cos if i go out drinkin', then i can stop thinkin', how the world done me wrong"

(#182) Brown ügynök válasza jeges (#181) üzenetére


Brown ügynök
(senior tag)

Jól érted. Az első megoldásod bejött de nem látom át miért jó. Ja, mert nincs else. :))

Még egyszer, van egy #template nevű inputom amibe a sablonnev (az ajax által visszaadott adat) kerül.

Köszi :R !

"hacsak nem jön a jó tündér break utasítás képében..."

(#183) szmegma


szmegma
(fanatikus tag)

JQUERY KOD:
$(document).ready(function() {
var yOffset = 9;
var xOffset = -25;
$(".dt").hide();

$(".help").click(function(e) {
var preid = $(this).attr("id");
var proid = preid.split('-');
var id = proid[1];
$("#f"+id).css("top", "2px").css("left", "-9px").css("position", "absolute").css("z-index", "9999");
$("#i"+id).css("top", (e.pageY + xOffset)+"px").css("left", (e.pageX + yOffset)+"px").slideToggle("slow");

});
});

HTML KOD:
<dt class="dt" id="i0"><img id="f0" src="_/arrow.png">EZ A SZOVEG JELENIK MEG KATTINTASRA</dt><img class="help" id="m-0" src="_/help.png">
<dt class="dt" id="i1"><img id="f1" src="_/arrow.png">EZ A SZOVEG JELENIK MEG KATTINTASRA</dt><img class="help" id="m-1" src="_/help.png">

Sziasztok! Keszitettem egy kattintasra elotuno, ujabb kattintasra eltuno scriptet. Ket problemam van:
1, Amikor kattintok es megjelenik a szoveg, akkor ha egy masik hasonlo gombra kattintok es az a szoveg resz is megjelenik nem tudom eltunteni az elozot. A lenyeg, hogy MINDIG csak az a szoveg legyen lathato amelyikre utolsonak kattintottam es ezzel egyidoben tuntesse el az elozot.
2, Amikor kattintok es megjelenik a szoveg, kellene vmi idolimit, hogy ha nem kattint, hogy tunjon el, akkor is tuntesse el mondjuk 5 masodperc utan.

A masodik problemamat probaltam setTimeout() fuggvennyel legyozni, de csak fel sikert ertem el: setTimeout("$('.dt').fadeOut();", 5000);
Elsore mukodik, de ha ujbol kattintok ugyan arra a gombra akkor amint megjelenik a szoveg, azonnal el is tunik.

Szoval a segitsegeteket kerem, hogyan oldhato meg a fenti ket problema?
Elore is koszonom.

[ Szerkesztve ]

http://www.diabloprogress.com/hero/szmegma-2182/DemonHunter/5238214

(#184) Brown ügynök válasza szmegma (#183) üzenetére


Brown ügynök
(senior tag)

A második problémára: setTimeout("$('.dt').hide();", 5000);

"hacsak nem jön a jó tündér break utasítás képében..."

(#185) Athlon64+ válasza szmegma (#183) üzenetére


Athlon64+
(senior tag)
LOGOUT blog

1. problémával annyi a problémám ( :DDD ), hogy invalidnak néz ki (nem vagyok benne biztos).

2. problémára gyógyír a delay(), példa: $(this).delay(5000).hide();

---

setTimeout-nak ne adjunk string-et 1. paraméternek, helyette alkalmazzunk pl. névtelen függvényt.

MCTS: .NET Framework 4, Web applications | <?php die('hard'); ?>

(#186) jeges válasza szmegma (#183) üzenetére


jeges
(senior tag)

mi okozza a problémát az eltüntetésben? logikailag a már megírt algoritmus használható némi kiegészítéssel:

var proid = $(this).attr("id").split("-");
var id2hide = ( (proid[1] * 1) == 1 ) ? 0 : 1;
var id2show = 1 * proid[1];

ahogy megjeleníted a két elemet, úgy a másik kettőt el is tudod tüntetni.

"...cos if i go out drinkin', then i can stop thinkin', how the world done me wrong"

(#187) szmegma


szmegma
(fanatikus tag)

Bocsi a kesoi valaszert.
Mint irtam probalkoztam a setTimeout() fuggvennyel de nem teljesen ugy mukodik ahogy elvarom.

Keszitettem egy teszt oldalt: [link]
Itt lehet probalgatni hogy mi miert nem mukodik. Ez pontos masa az eredetinek.
------------------------------------------------------------------------------------------------------------
A $(this).delay(5000).hide(); reszt is probaltam, ekkor pedig a slideToggle hal meg.
------------------------------------------------------------------------------------------------------------
A var id2hide var id2show resz nem tudom mire lenne jo nekem az eltuntetesben? Mivel ha vki kattint mondjuk az 5. boxra majd a 2. boxra ez a kod nem fogja tudni, hogy az 5. box nyitva van.
------------------------------------------------------------------------------------------------------------

Lehet rossz helyre teszem a setTimeout() reszt es azert nem kepes mukodni?

[ Szerkesztve ]

http://www.diabloprogress.com/hero/szmegma-2182/DemonHunter/5238214

(#188) jeges válasza szmegma (#187) üzenetére


jeges
(senior tag)

nos, nem véletlen, h visszakérdeztem, mer' nem volt egyértelmű, mi okozza a problémát. a kód egyébként bizonyosan tudni fogja, hogy nyitva van-e, ha megkérdezed tőle. pl:
$(".help").each(function(){
if($this.css("display") != "none"){ ... }
});

vagy (ha pl nem szereted az .each() -t) hover-re adsz az elemnek egy "hover" (vagy akármilyen) class-t, és azt használod

$(".help").bind("mouseover",function(){ $(this).addClass("hover"); });
$(".help").bind("mouseout",function(){ $(this).removeClass("hover"); });

így a fenti helyett:
$(".help").not(".hover").prev().css("display","none");

"...cos if i go out drinkin', then i can stop thinkin', how the world done me wrong"

(#189) szmegma válasza jeges (#188) üzenetére


szmegma
(fanatikus tag)

Elkeszitettem de most meg jobban osszegabalyodott a cucc.

MEGTEKINTES

:F

[ Szerkesztve ]

http://www.diabloprogress.com/hero/szmegma-2182/DemonHunter/5238214

(#190) martonx válasza szmegma (#189) üzenetére


martonx
(őstag)

jeges az each funkciót az ellenőrzésre értette.
Ami jó is, csak te most már kevered a szezont a fazonnal.
1. Ellenőrizd le, hogy melyik elemre ment a kattintás, ezt még az each előtt (ezt meg is tetted).
2. Majd jöhet az each, ahol először is vesd össze, hogy az adott elem amiben éppen azeach tart az a kattintott-e, vagy sem.
Ha nem a kattintott, akkor tüntesd el a képet, ha pedig pont a kattintott az, akkor jelenítsd meg a képet.

Szóval nálad most ez az ellenőrzés hiányzik, mert ami ellenőrzésed van az hülyeség.

HOPPÁ!

(#191) jeges válasza szmegma (#189) üzenetére


jeges
(senior tag)

1 a hide() utáni 2 sor szinte biztos felesleges. ha hide-olod az elemet, utána sztem nem kell slidedown+slideup
2 az kavarhat még be, h else ágon van a slidedown+slideup. else helyett az .each utánra tenném, mert csak egyszer akarod végrehajtani.

összefoglalva az .each-be csak a hide kell sztem, az eredeti slide-ok az each után külön egyszer végrehajtva.

"...cos if i go out drinkin', then i can stop thinkin', how the world done me wrong"

(#192) szmegma


szmegma
(fanatikus tag)

Idaig jutottam el: MEGTEKINTES

Jelenleg egy problema kivetelevel mukodik rendesen. Az a bajom, hogy amikor kattintok mondjuk a 4. kerdojelre es megjelenik a 4. box tartalma, ujboli kattintas a 4. kerdojelre azt eredmenyezi, hogy eltunik egy idore a 4. box tartalma de ujbol megjelenik, majd a delay() miatt ismet eltunik.

Hogyan lehetne ezt megakadalyozni, hogy ha nyiott cuccra kattintok akkor az szimplan tunjon el es ne pedig a kodot futtassa?
Probaltam valtozoba helyezni a nyitott box ID-jet de nem sikerult.

http://www.diabloprogress.com/hero/szmegma-2182/DemonHunter/5238214

(#193) jeges válasza szmegma (#192) üzenetére


jeges
(senior tag)

sztem az else ágon a hide-ot cseréld return false; - ra.

"...cos if i go out drinkin', then i can stop thinkin', how the world done me wrong"

(#194) szmegma válasza jeges (#193) üzenetére


szmegma
(fanatikus tag)

Ezzel ugyan ugy nem mukodik es igy problema jelenik meg:
mondjuk nyitott a 4. box es kinyitom a 7. boxot akkor a 4. box nem tunik el.

Szerintem valtozoba kellene tenni a nyitott box ID-jet es azt osszehasonlitani a kattintott ID-vel, nem?
Probaltam a h != id de a h nem a nyitott box ID-jet tartalmazza, igy az if<>else ag is ertelmetlen.

[ Szerkesztve ]

http://www.diabloprogress.com/hero/szmegma-2182/DemonHunter/5238214

(#195) jeges válasza szmegma (#194) üzenetére


jeges
(senior tag)

erre megoldás amit fent írtam: katt-ra adsz egy spec class-t a kinyitott elemnek, és azt vizsgálod. id-t is lehet, de a class valamivel rugalmasabb, kevésbé csúf, ha mondjuk törlöd, mint id esetében.

szerk: nézegettem is a kódot, hogy vajon mi az a h változó a névtelen függvényben

[ Szerkesztve ]

"...cos if i go out drinkin', then i can stop thinkin', how the world done me wrong"

(#196) szmegma válasza jeges (#195) üzenetére


szmegma
(fanatikus tag)

De ha adok a kinyitott elemnek egy classt akkor a kod honnan fogja tudni, hogy ha ujra a kinyitott elemre kattintok, akkor az a teendo, hogy tuntesse el?

http://www.diabloprogress.com/hero/szmegma-2182/DemonHunter/5238214

(#197) jeges válasza szmegma (#194) üzenetére


jeges
(senior tag)

a legegyszerűbb valszeg az lenne, ha a h != id helyett
preid != $(this).attr(id) - t írnál
ez a feltétel azt jelenti, hogy a klikk célelem és az each-ben éppen vizsgált elem id-je egyezik
ha ez a feltétel nem teljesül (azaz a klikkelt elemnél járunk az each-ben), és a vizsgált elem display-e nem none, az azt jelenti, hogy végrehajtás alatt van a kód. ebben az esetben meg kell szakítani a futást (azaz return false;)

"...cos if i go out drinkin', then i can stop thinkin', how the world done me wrong"

(#198) szmegma válasza jeges (#197) üzenetére


szmegma
(fanatikus tag)

Amit irsz az tiszta es ertem.
El is keszitem igy a kodot:

<script type="text/javascript">
$(document).ready(function() {
var yOffset = 15;
var xOffset = -23;
$(".dt").hide();

$(".help").click(function(e){
var preid = $(this).attr("id");
var proid = preid.split('-');
var id = proid[1];

$(".dt").each(function(){
var postid = $(this).attr("id");

if(preid != postid){
$(".dt").hide();
//alert(postid+"|"+preid);
}

else{
return false;
}
});
$("#f"+id).css("top", "12px").css("left", "-9px").css("position", "absolute").css("z-index", "9999");
$("#i-"+id).css("top", (e.pageY + xOffset)+"px").css("left", (e.pageX + yOffset)+"px").slideDown("slow").delay(2000).slideUp("slow");
});
});</script>

Megsem mukodik. Szerintem a $("#f"+id).css("top", "12px").css("left", "-9px").css("position", "absolute").css("z-index", "9999");

$("#i-"+id).css("top", (e.pageY + xOffset)+"px").css("left", (e.pageX + yOffset)+"px").slideDown("slow").delay(2000).slideUp("slow"); resz a baja, hogy nem az each function-on belul van es miutan az lefutott ezek mindenkeppen lefutnak attol fuggetlenul, hogy mi jott vissza az each-bol.
Tevedek?

[ Szerkesztve ]

http://www.diabloprogress.com/hero/szmegma-2182/DemonHunter/5238214

(#199) jeges válasza szmegma (#198) üzenetére


jeges
(senior tag)

de igazad van.
azt nem látom a kódban, hol vizsgálod, hogy display:none igaz-e.
a korábban megbeszéltek szerint akkor kell futtatni a slide-okat, ha
1) az each-ben ahhoz az elemhez értünk, amelyikre klikkeltünk - ez a két id összevetése
2) éppen nincs végrehajtás alatt a kód --> display nem "none"

ez alapján a slide-os részt az else ágon belül még egy elágazásba kellene tenni
if ($(this).css("display") == "none"){...}

"...cos if i go out drinkin', then i can stop thinkin', how the world done me wrong"

(#200) szmegma válasza jeges (#199) üzenetére


szmegma
(fanatikus tag)

if(preid != postid){
$(".dt").hide();
//alert(postid+"|"+preid);
}

Akarmire kattintok preid SOHA nem lesz egyenlo postid-vel mivel a slide resz az elsebe kerult. Ahhoz, hogy az else ag igaz legyen legalabb egyszer igaznak kellene lennie az else agnak... odogi korbe tettem a kodot...
Abszolut elvesztettem a fonalat.

MEGTEKINTES

[ Szerkesztve ]

http://www.diabloprogress.com/hero/szmegma-2182/DemonHunter/5238214

Hirdetés

Útvonal

Fórumok  »  Szoftverfejlesztés  »  jQuery topic
Copyright © 2000-2014 PROHARDVER Informatikai Kft.