2011-10-02 178 views
0

每次my_div recive class'selected'時,我都想改變背景顏色。 到目前爲止,我得到這個:如何在jQuery中使用if語句

$(document).ready(function() { 
    if ($('#my_div').hasClass('selected')) { 
     $("body").css({backgroundColor: '#111'}); 
    } 
}); 

,但它不工作。

怎麼了?

+2

你能說明它是如何接收這個類的嗎? –

+1

如果你使用jQueryUIs'selectable',我會傾聽'selectableselected'事件。 –

+1

你在尋找['.live()'](http://api.jquery.com/live/)或['.delegate()'](http://api.jquery.com/delegate/) ? –

回答

2
I want to change background color each time when my_div recive class 'selected'. 

有一塊這是給你的元素selected類代碼。這段代碼有效地將您的元素的class更改爲class = "whatever classes previously existed insertednewclass"。做你想做什麼

的一種方法,就是找到它添加/刪除類的功能,並連接它,例如:

myFunction = function(...) { 
    $('#my_div').addClass('selected'); 
    // add more code 
    $('#my_div').css({backgroundColor:...}); 
} 

我假設你的情況是不像這樣簡單。但是,即使函數位於外部庫中,這也是可能的,但是如果庫改變了它的內部行爲,那麼這是有風險的。

// some.function is the function which adds the "selected" class 
var oldFunction = some.function; 
some.function = function() { 
    return oldFunction.apply(this, arguments); 
} 

如果你不能做到這一點,必須被動地檢測出類屬性修改,你可以使用在非IE瀏覽器隱約支持棄用的DOM 2級突變事件http://www.w3.org/TR/DOM-Level-3-Events/#events-mutationevents。您可以通過jQuery中的$.bind查看它是否受支持;如果它在jQuery中不受支持,則可以使用your_element.addEventListener(...)這是本地方式來執行任務(基本上,jQuery正在使用的所有內容)。

1

您可以創建一個自定義事件,當選定的類被設置或刪除時,該事件將被觸發。

例如

$(document).ready(function() { 
    $('#my_div').live('myDivChangedState', function(event) { 
     if($(event.target).hasClass('selected')) { 
      ... 
     } 
    }); 
}); 

而不僅僅是觸發事件:

$('#my_div').addClass('selected').trigger('myDivChangedState'); 
-- OR -- 
$('#my_div').removeClass('selected').trigger('myDivChangedState');