2010-03-29 28 views
10

Tôi muốn kiểm tra xem một phần tử có lớp .active, nếu nó thêm: margin-top: 4px;jQuery - Chỉ thực hiện một lần

Tuy nhiên tôi chỉ muốn điều này xảy ra khi, khi trang tải, khi lớp đã được phát hiện, tôi không muốn phát hiện lại và thêm kiểu CSS.

Lớp này được áp dụng khi các yếu tố nhất định được di chuột qua.

Điều này có thể thực hiện được trong jQuery không?

Trả lời

22

Khám phá sự kiện one. Ví dụ tài liệu:

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

Tôi không nghĩ rằng "một" sẽ giải quyết vấn đề về dan. Bạn có thể bị ràng buộc vào tài liệu sẵn sàng không? – hunter

+3

@Hunter - Các op nói 'Đây là lớp được áp dụng khi một số yếu tố được di chuột qua.' điều đó đã khiến tôi tin rằng anh ấy muốn một sự kiện di chuột để chỉ bắn một lần trên các yếu tố nhất định. Tôi có thể sai, tất nhiên, trong trường hợp đó câu trả lời của bạn có lẽ là con đường để đi. – karim79

+0

tuyệt vời @ karim79 điều này hoạt động tốt :) –

3

này sẽ cháy một lần vào tải trang

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

Tôi không nghĩ rằng "một" là cần thiết trong trường hợp này. Sử dụng giải pháp này sẽ hoạt động --- document.ready chỉ kích hoạt một lần. – macca1

2

Con đường tôi thường làm điều này là:

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

Bằng cách này tôi có:

  • chức năng tái sử dụng
  • yếu tố xử lý được đánh dấu và sẽ không được xử lý thời gian tiếp theo hàm được gọi
  • yếu tố được xử lý trong bối cảnh mà thôi, nếu được chỉ định (ví dụ, mã HTML trở lại thông qua một yêu cầu AJAX)

Hy vọng điều này giúp)

Các vấn đề liên quan