Avatar billede herlevsen123 Nybegynder
12. januar 2013 - 01:03 Der er 6 kommentarer og
1 løsning

jquery slide, stoppropagation

Jeg prøver at lave en slideToggle, ved tryk i en div. Men jeg ønsker ikke at den div der slider ned skal "arve" click eventen. Har prøvet med stoppropagation og unbind, men intet er rigtig lykkedes for mig.

http://jsfiddle.net/J94Gd/

Den ligger sikkert lige til højrebenet for jer (:
Avatar billede olebole Juniormester
12. januar 2013 - 01:27 #1
<ole>

Højre hånd, men okay  *o)

$('#div1').click(function(hej) {
  hej.stopPropagation();
  $('#div2').slideToggle('fast');
});

/mvh
</bole>
Avatar billede olebole Juniormester
12. januar 2013 - 01:50 #2
Et lille nordossetisk cowboytrick:

Når du sidder med sådan et script og kommer til at tænke: "Gad vise, hvad variablen 'hej' indeholder", kunne du prøve med:

$('#div1').click(function(hej) {
    alert(hej);
    //$('#div2').slideToggle('fast');
});

- men det returnerer blot 'object [Object]'. I stedet kan du hente alle properties ud af objektet på denne måde:

$('#div1').click(function(hej) {
    var a = [];
    for (var x in hej) {
        a.push(x + " => " + hej[x]);
    }
    alert(a.join("\n"));
    //$('#div2').slideToggle('fast');
});

Så vil du uden tvivl kunne genkende 'hej' som et event objekt af en eller anden slags. Derfor vile det være oplagt at prøve stopPropagation på dén variabel.

En anden mulighed er naturligvis at kikke i dokumentationen, hvor man umiddelbart kan se, der er tale om et event objekt.

Et klik i menuen ude i venstre side, sender dig til denne side, hvor stopPropagation er dokumenteret  =)
Avatar billede herlevsen123 Nybegynder
12. januar 2013 - 13:43 #3
Lige præcis den løsning har jeg prøvet, og der kan jeg jo stadig klikke inde i div 2, for at toggle den. Måske har jeg misforstået stoppropagation?

Skal nok have læst lidt mere på jquery.
Avatar billede olebole Juniormester
12. januar 2013 - 17:12 #4
Jo, det kan du godt. Det fungerer helt fint  =)
Avatar billede herlevsen123 Nybegynder
12. januar 2013 - 18:20 #5
Det er jo det jeg gerne vil undgå at jeg kan. Når man trykker inde i div2 skulle den gerne forblive åben.

http://jsfiddle.net/n4WBb/1/
Avatar billede olebole Juniormester
12. januar 2013 - 18:34 #6
Ahhhh ... forstår jeg  =)

$('#div2').click(function(evnt) {
  evnt.stopPropagation();
});
$('#div1').click(function(hej) {
  $('#div2').slideToggle('fast');
});

- burde i så fald kunne gøre det
Avatar billede herlevsen123 Nybegynder
12. januar 2013 - 18:48 #7
Ah, det giver jo egentlig god mening. Jeg takker for hjælpen og lukker af. God aften! (-:
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester