2010-03-29 18 views
10

Ich möchte überprüfen, ob ein Element die Klasse .active hat, wenn es hinzufügen: margin-top: 4px;jQuery - Nur einmal tun

Allerdings möchte ich nur dies einmal auftreten, wenn die Seite geladen wird, sobald die Klasse erkannt wurde möchte ich nicht wieder erkennen und den CSS-Stil hinzufügen.

Diese Klasse wird angewendet, wenn bestimmte Elemente über den Cursor gezogen werden.

Ist dies in jQuery möglich?

Antwort

22

Überprüfen Sie die one Veranstaltung. Dokumentiertes Beispiel:

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

Ich denke nicht, dass "eins" Dants Problem lösen wird. Kann man zur Dokumentation bereit sein? – hunter

+3

@Hunter - Der OP sagte: "Dies ist die Klasse, die angewendet wird, wenn bestimmte Elemente überschwebend sind." was mich zu der Überzeugung brachte, dass er möchte, dass ein Mouseover-Event nur einmal auf bestimmte Elemente feuert. Ich könnte natürlich falsch liegen, in diesem Fall ist Ihre Antwort wahrscheinlich der Weg zu gehen. – karim79

+0

great @ karim79 das funktioniert gut :) –

3

Diese wird ausgelöst, wenn beim Laden der Seite

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

Ich glaube nicht, dass "eins" in diesem Fall notwendig ist. Die Verwendung dieser Lösung wird funktionieren --- document.ready wird nur einmal ausgelöst. – macca1

2

So wie ich in der Regel dies zu tun ist:

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

Auf diese Weise habe ich:

  • wiederverwendbare Funktion
  • verarbeiteten Elemente sind markiert und werden beim nächsten Mal nicht verarbeitet werden die Funktion aufgerufen wird
  • Elemente im Rahmen verarbeitet werden, nur, wenn angegeben (zB HTML-Code über eine AJAX-Anforderung zurückgegeben)

Hope this hilft)