2010-11-10 9 views
0

J'utilise un carrousel jQuery, téléchargé ici: http://www.thomaslanciaux.pro/jquery/jquery_carousel.htmévénement déclencheur jQuery lorsqu'un objet est donné une classe

Il utilise la pagination, et applique une classe appelée « active » au numéro de page lorsque le numéro de page est cliqué. Je souhaite déclencher un événement lorsque cette classe est appliquée, car elle utilise également les flèches gauche et droite pour appliquer la classe au numéro de la page en cours.

est ici le cas où je veux être déclenché lorsque la classe est appliquée:

$('.red').click(function() { 
    $('#formred').attr('checked', 'checked'); 
}); 

Je l'ai eu à travailler, mais seulement quand la page se charge:

if ($('.red').hasClass('active')) { 
     $('.red').trigger('click'); 
} 

La première page nombre a la classe appliquée par défaut, ce qui explique pourquoi cela fonctionne lorsque la page se charge. J'ai besoin que cela se produise car la classe est appliquée à d'autres numéros de page.

+0

Je pense que vous devez changer votre code techniquement. Ceci parce que vous voulez réellement déclencher un événement qui doit répondre à un autre événement étant déclenché. – Harmen

+0

C'est l'événement qui se produit lorsque je clique sur le numéro de la page. N'est-il pas possible de déclencher cet événement lorsque la classe "active" lui est également appliquée? –

Répondre

0

ne pouvait pas vous créer un gestionnaire d'événements partagés, comme:

function changePage(pageNum, nextprev){ 
    if(nextprev) pageNum = activePage + nextprev; 

    // show the next page 

    $('someElement').addClass('active'); 
} 

Et puis définissez cet événement à la fois et cliquez keydown:

$(...).keydown(function(){ 
    changePage([1 or -1, depending on input], true); 
}); 

$(...).click(function(){ 
    changePage([clicked page], false); 
}); 
+0

Je ne m'inquiète pas de la fonctionnalité du carrousel.J'ai besoin d'un événement séparé du carrousel pour se produire une fois que la classe "active" est appliquée le numéro de page. Cet événement est la deuxième ligne du code de mon message. –

2

EDIT: Si vous êtes juste besoin de cela sur les clics de bouton, et non pour sa fonctionnalité auto, vous pouvez simplement placer un .delegate() sur le .carousel une fois qu'il est disponible qui écoute click événements sur le 'a[role=button]' éléments.

$('.carousel').delegate('a[role=button]', 'click', function() { 

    // Because a button in the carousel was clicked, we know that 
    // one of the elements received the .active class. So we just 
    // need to find it. 
    var $activeButton = $(this).closest('.carousel').find('.active'); 

    // Not sure how the .red class from your question factors in, but you 
    // can test the $activeButton to see if it has that class 
    if($activeButton.hasClass('red')) { 
     $('#formred').attr('checked', 'checked'); 
    } 
}); 

Encore une fois, cela ne fonctionne que pour les événements de clic sur les boutons, pas s'il est configuré pour auto rotate. Je ne sais pas si c'est ce que vous cherchez.


Si besoin est, il y a un plugin appelé livequery qui exécuter du code sur les modifications DOM via jQuery.

http://brandonaaron.net/code/livequery/docs

$('.someClass').livequery(function() { 
    // your code 
}); 

Si vous passez un second argument de la fonction, il fonctionnera lorsque la classe (ou élément) est supprimé.

$('.someClass').livequery(function() { 
    // your code when adding 
}, function() { 
    // your code when removing 
}); 
+0

Merci pour le montrer. Mais je ne pense pas que je veuille un autre plugin juste pour ça. Je suis sûr qu'il peut être codé à la main, mais je ne sais pas comment :) –

+0

Certaines personnes (les gens comme moi :-) considèrent "livequery" comme quelque chose à utiliser avec une extrême prudence de toute façon. Cela fonctionnerait cependant; au moins, je pense que ce serait le cas. – Pointy

+0

@Pointy: Je suis totalement d'accord, d'où le * "Si besoin est ..." *. J'aurais probablement dû le souligner plus. Ce devrait vraiment être un dernier recours. – user113716

0

Ce que je voudrais faire est:

1 désactiver AutoPlay

2 créer un setInterval qui fait un déclencheur (clic) sur la mise en page du carrousel

3 -et bien sûr à l'intérieur que vous pourriez faire plus alors juste déclencher les diapositives

Questions connexes