jQuery topic - Szoftverfejlesztés fórum

üzenetek

hozzászólások


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() );


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 !


szmegma
(aktív 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 ]


Brown ügynök
(senior tag)

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


Peter Kiss
(senior tag)
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.


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.


szmegma
(aktív 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 ]


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");


szmegma
(aktív tag)

Elkeszitettem de most meg jobban osszegabalyodott a cucc.

MEGTEKINTES

:F

[ Szerkesztve ]


martonx
(veterán)

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.


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.


szmegma
(aktív 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.


jeges
(senior tag)

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


szmegma
(aktív 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 ]


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 ]


szmegma
(aktív 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?


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;)


szmegma
(aktív 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 ]


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"){...}


szmegma
(aktív 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 ]

üzenetek