2012-05-16 32 views
12

Tôi muốn sự kiện của mình được kích hoạt trên thẻ div mua lại lớp "trình kích hoạt". nhưng, tôi không có ý tưởng làm thế nào để làm cho nó lắng nghe sự kiện thêm lớp.kích hoạt sự kiện khi thay đổi lớp học

Bạn có thể vui lòng cho tôi biết cách tôi cần biết?

<div id="test">test</div> 

<script type="text/javascript"> 
    document.getElementsById.setAttribute("class", "trigger"); 

    function workOnClassAdd() { 
     alert("I'm triggered"); 
    } 
</script> 
+0

Bạn có chắc chắn biết lớp sẽ được cập nhật với '.setAttribute()' hoặc đang nói về nhiều hơn tùy ý (ví dụ bạn muốn xử lý sự kiện cháy ngay cả khi người dùng thay đổi lớp thông qua Firebug)? – jaredhoyt

+1

FYI http://stackoverflow.com/questions/1950038/jquery-fire-event-if-css-class-changed – Dasarp

+0

wow, tốt! cảm ơn bạn. –

Trả lời

13

Vâng có mutation events, nhưng họ đã bị phản đối và tương lai sẽ có đột biến quan sát, nhưng họ sẽ không được hỗ trợ đầy đủ cho một thời gian dài. Vì vậy, những gì bạn có thể làm trong thời gian có nghĩa là?

Bạn có thể sử dụng bộ hẹn giờ để kiểm tra phần tử.

function addClassNameListener(elemId, callback) { 
    var elem = document.getElementById(elemId); 
    var lastClassName = elem.className; 
    window.setInterval(function() { 
     var className = elem.className; 
     if (className !== lastClassName) { 
      callback(); 
      lastClassName = className; 
     } 
    },10); 
} 

Chạy ví dụ: jsFiddle

+0

cảm ơn bạn! ngày tốt. –

+0

Đã bị đóng vì không tham khảo câu trả lời của bạn một cách hoàn hảo ... Dù sao nó thậm chí có thể được thực hiện bằng cách sử dụng [plugin này dễ dàng] (https://github.com/kapetan/jquery-observe) ... Câu trả lời của tôi cho một câu hỏi tương tự là [ ở đây] (http://stackoverflow.com/a/23458573/2260614) .. *** Hy vọng nó sẽ giúp ai đó *** – Bhavik

+2

Các nhà quan sát đột biến có sẵn những ngày này, woooohoooo! – johndoevodka

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