[jQuery] .click event op div, maar niet op alle items erin

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Duncank
  • Registratie: December 2007
  • Laatst online: 13-09 22:55
Ik heb een website met meerdere items erop die allemaal op dezelfde manier zijn opgebouwd:
HTML:
1
2
3
4
5
6
7
8
9
10
<div class="item">
  <div class="itemheader">
    <h2>itemtitel</h2>
    <a href="javascript:void(0);" class="wijzig">*icoontje*</a>
    <a href="javascript:void(0);" class="toggle">*icoontje*</a>
  </div>
  <div class="itemcontent">
    tekst etc.
  </div>
</div>


Wanneer ik op de toggle-link klik klapt de itemcontent-div in of uit (dmv .slideToggle(); ).
Maar nu wil ik het zo maken dat wanneer op de itemheader geklikt wordt de content in- en uitklapt. Dat is in eerste instantie natuurlijk eenvoudig door dit te doen:
JavaScript:
1
2
3
$('.itemheader').click(function(){
  $(this).parent().find('itemcontent').slideToggle();
});
(corrigeer me als dit beter kan aub!)

maar ik wil nu zorgen dat wanneer er op de wijzig of toggle link geklikt wordt dit niet gebeurd. Daarvoor dacht ik na $('.itemheader') .not('a.wijzig') toe te voegen. Dat werkt echter niet, terwijl dat volgens mij wel zou moeten. $('.itemheader:not(a.wijzig)') lijkt ook niet te werken.

Waar ga ik mis?

[ Voor 69% gewijzigd door Duncank op 19-03-2011 17:06 ]


Acties:
  • 0 Henk 'm!

  • Manuel
  • Registratie: Maart 2008
  • Laatst online: 14-09 14:15
En wat is de vraag precies?

Wil je nu dat als je op .itemheader klikt dat .itemcontent niet triggert?

[ Voor 58% gewijzigd door Manuel op 19-03-2011 16:48 ]


Acties:
  • 0 Henk 'm!

  • Duncank
  • Registratie: December 2007
  • Laatst online: 13-09 22:55
Manuel schreef op zaterdag 19 maart 2011 @ 16:48:
En wat is de vraag precies?

Wil je nu dat als je op .itemheader klikt dat .itemcontent niet triggert?
Sorry, ik wilde met "tab" een indent in de code maken maar die versprong naar de "verstuur" knop en toen ik op spatie drukte werd mijn bericht geplaatst.

Acties:
  • 0 Henk 'm!

  • Manuel
  • Registratie: Maart 2008
  • Laatst online: 14-09 14:15
Duncank schreef op zaterdag 19 maart 2011 @ 16:54:
[...]


Sorry, ik wilde met "tab" een indent in de code maken maar die versprong naar de "verstuur" knop en toen ik op spatie drukte werd mijn bericht geplaatst.
Kun je misschien even code tags toevoegen? Dat leest namelijk een stukje beter. :)

Is het trouwens niet makkelijker om dit grotendeels met CSS op te lossen?
Cascading Stylesheet:
1
2
h2 { width: 94%; }
.wijzig, .toggle { width: aantal px;  }


En dan in jQuery:
JavaScript:
1
2
3
4
5
$(".itemheader > h2").click(function() {
    // Je code
});

$(".itemheader > .wijzig").click(function() { }); //etc


Dit lijkt mij een stuk makkelijker toe te passen dan met selectors klooien.

[ Voor 5% gewijzigd door Manuel op 19-03-2011 17:03 ]


Acties:
  • 0 Henk 'm!

  • TheNameless
  • Registratie: September 2001
  • Laatst online: 07-02 21:38

TheNameless

Jazzballet is vet!

Volgens mij moet zoiets wel werken:

JavaScript:
1
2
3
4
5
$('.itemheader').click(function(e){
    if(!$(e.target).is('a')) {
        $(this).parent().find('itemcontent').slideToggle();
    }
});


.. maar de oplossing hierboven is natuurlijk mooier!

[ Voor 12% gewijzigd door TheNameless op 19-03-2011 17:07 ]

Ducati: making mechanics out of riders since 1946


Acties:
  • 0 Henk 'm!

  • UltimateB
  • Registratie: April 2003
  • Niet online

UltimateB

Pomdiedom

Inderdaad het werken met een target en daarop de acties baseren zou goed moeten werken.

"True skill is when luck becomes a habit"
SWIS


Acties:
  • 0 Henk 'm!

  • Duncank
  • Registratie: December 2007
  • Laatst online: 13-09 22:55
Kijk eens, ik heb de code tags toegevoegd, leest inderdaad beter;)

Manuel, de opzet van de itemheader is iets gecompliceerder als in het voorbeeld dat ik hierboven beschreef, en bijvoorbeeld het titel-element veranderd in een input veld om dit te kunnen wijzigen, dus de css oplossing zou mogelijk zijn, maar wel een hele klus.

De oplossing van TheNameless werkt perfect! Veel beter als het werken met .not(), want dit doet het gewoon :D

Thanks!

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 10-09 08:45

Bosmonster

*zucht*

Kijk ook eens naar stopPropagation en consorten, dat is juist bedoeld om event bubbling te managen. Verder zou je als The Nameless z'n oplossing werkt voor jou ook eens kunnen kijken naar event delegation (delegate).
Pagina: 1