2010-03-29 5 views
10

Je veux vérifier si un élément a la classe .Active, s'il ajoute: margin-top: 4px;jQuery - Ne faites qu'une seule fois

Cependant, je veux seulement que cela se produise fois, lorsque la page se charge, une fois la classe a été détectée, je ne veux pas le détecter à nouveau et ajouter le style CSS.

Cette classe est appliquée lorsque certains éléments sont survolés.

Est-ce possible dans jQuery?

Répondre

22

Découvrez l'événement one. exemple Documenté:

$('#foo').one('click', function() { 
    alert('This will be displayed only once.'); 
}); 
+0

Je ne pense pas que "one" va résoudre le problème danits. Peut-on être obligé de documenter prêt? – hunter

+3

@Hunter - L'op dit "Cette classe est appliquée lorsque certains éléments sont survolés." ce qui m'a amené à croire qu'il veut qu'un événement mouseover ne tire qu'une seule fois sur certains éléments. Je peux me tromper, bien sûr, auquel cas votre réponse est probablement la voie à suivre. – karim79

+0

great @ karim79 cela fonctionne bien :) –

3

Cela ouvrira une fois à la page charge

$(function(){ 
    if ($("#elementid").hasClass("active")) 
    { 
     $("#elementid").css("margin-top", "4px"); 
    } 
}); 
+0

Je ne pense pas que "un" est nécessaire dans ce cas. L'utilisation de cette solution ne fonctionnera qu'une fois. – macca1

2

La façon dont je fais habituellement c'est:

(function($) { 

    // my custom function to process elements 
    function myProcessFunction(context) { 

    // get context  
    context = context || document; 

    // select elements within the context, filter out already processed ones 
    // loop through remained (unprocessed) elements 
    // '.my-class' - selector for the elements I want to process 
    $('.my-class:not(.my-class-processed)', context).each(function(i.e){ 

     // mark the element as processed 
     $(e).addClass('my-class-processed'); 

     // add process code here 

    }); 
    } 

    // run myProcessFunction on document.ready 
    $(document).ready(function(){ 
    myProcessFunction(); 
    }); 

})(jQuery); 

De cette façon, je:

  • fonction réutilisable
  • éléments traités sont marqués et ne seront pas traitées la prochaine fois que la fonction est appelée
  • éléments sont traités dans le contexte que, si cela est spécifié (par exemple, le code HTML retourné par une requête AJAX)

Hope this aide)

Questions connexes