2014-01-13 56 views
3

有HTML列表作爲,檢測事件,當類添加到李

<ul id="slider"> 
    <li class=""></li> 
    <li class=""></li> 
    <li class=""></li> 
    <li class="selected"></li> 
    <li class=""></li> 
    <li class=""></li> 
    <li class=""></li> 
<ul> 

我加入選擇類的任何li元素的。 這裏我已經添加class =「selected」到第四個li元素。

要執行一些代碼時類選擇被添加到任何li元素的。

嘗試過這一項,但未按預期工作。

<script> 
    $(function() { 
     $('#slider').bind('DOMSubtreeModified', function(e) { 
      alert("Changed"); 
     }); 
    }); 
</script> 
+9

當您添加類,調用特定的功能...使用任何其他方式將只是實踐壞的[jQuery的 –

+1

可能重複 - 消防事件如果CSS類更改](http://stackoverflow.com/questions/1950038/jquery-fire-event-if-css-class-changed) – undefined

回答

2

處理此問題的最佳方法是在添加類時調用您的函數,因爲它是您的代碼添加它。

有兩種常見的方式做到這一點:

  1. 你可以做到這一點與直接調用:

    li.addClass("selected"); 
    doSomethingBecauseItChanged(li); 
    
  2. 或者您也可以通過在li提高自己的事件做其他代碼可以監聽的元素,這些代碼更加徹底地將代碼添加到應答變化的代碼中。

    這裏的監聽代碼事件:

    $("#slider").on("added-class", function() { 
        alert("Changed"); 
    }); 
    

    而這裏的代碼添加類和引發事件:

    li.addClass("selected").trigger("added-class"); 
    

    注意added-class是我編了一個名字,不是已經存在。使用任何你喜歡的名字,只要確保不與現有的事件類型衝突。

    下面是一個完整的示例:Live Copy | Live Source

    <!DOCTYPE html> 
    <html> 
    <head> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script> 
    <meta charset=utf-8 /> 
    <title>Event Example</title> 
        <style> 
        li.selected { 
         color: green; 
        } 
        </style> 
    </head> 
    <body> 
    <p>In two seconds, the third item will turn green and you'll see an alert.</p> 
    <ul id="slider"> 
        <li class="">xxxxx</li> 
        <li class="">xxxxx</li> 
        <li class="">xxxxx</li> 
        <li class="">xxxxx</li> 
        <li class="">xxxxx</li> 
        <li class="">xxxxx</li> 
        <li class="">xxxxx</li> 
        </ul> 
        <script> 
        $("#slider").on("added-class", function() { 
         alert("Changed"); 
        }); 
        setTimeout(function() { 
         $("#slider li").eq(2).addClass("selected").trigger("added-class"); 
        }, 2000); 
        </script> 
    </body> 
    </html> 
    

另外,如果你並不需要IE瀏覽器的支持,您可以使用mutation observersupport matrix),但坦率地說,你真的不應該,如果你控制那就是把該代碼需要使用這些類。

1

在點擊事件中添加類後,只需調用一個函數。

$(function() { 

    function doSomething() { 
     ..... 
    } 

    $('ul').on('click', 'li' function(e) { 
      $(this).addClass('selected'); 
      doSomething(); 
    }); 
}); 
0

註冊處理程序時,您要添加的class.Something這樣

$('li').addClass('selected').trigger('class-change'); 
$('#slider').bind('class-change', function() { 
    //do something 
}); 
});