2010-06-29 60 views
5

當元素類發生更改時,是否有方法在jQuery中觸發事件?類名更改jQuery中的事件

實例:

<img class="selected" /> 

<img class="selected newclass" /> 

觸發事件


而且

<img class="selected" /> 

<img class="" /> 

觸發事件

+1

發生這種情況時,你想要做什麼? – 2010-06-29 10:07:06

回答

9

您可能能夠解決方法在一個小哈克的方式。 Hook.addClass() & .removeClass()像這樣:

var _addClass = $.fn.addClass, 
    _removeClass = $.fn.removeClass; 

$.fn.addClass = function(){ 
    // do whatever here 
    return _addClass.apply(this, arguments); 
} 

$.fn.removeClass = function(){ 
    // do whatever here 
    return _removeClass.apply(this, arguments); 
} 

這樣一來,假設你是看元素類的變化與jQuery的有興趣,可以觸發addingremoving類的任何代碼。再說一次,就是如果你正在使用jQuery,這個例子。

當然,你可以用hookoverwrite這樣的任何javascript函數。

由於Nick Craver在評論中提到,還有其他幾種jQuery方法,它們可以是addremove元素類。你將不得不hook所有這些,即:

.addClass() 
.removeClass() 
.toggleClass() 
.removeAttr('class') 
.attr('class', 'changed') 

,除非你確切地知道哪些方法被調用來操縱一類,你就必須關心那些的。

+0

+1來提出這個想法..! – Kai 2010-06-29 10:13:42

+0

+1優雅的解決方案。 – jensgram 2010-06-29 10:25:59

+1

優雅,但要注意其他方法,'.toggleClass()','.attr('class')','.class =',有很多方法來改變一個類。我想有一個更簡單的解決方案,但是需要知道OP的內容。 '.addClass('alreadyHadThisClass')''和'.removeClass('DidNotHaveThis')'沒有任何效果,你也需要處理這個。 – 2010-06-29 10:38:20

-1

我不認爲這是可能的。

事件基於用戶操作,所以點擊,dblclick,mouseover等都是用戶操作。

您可能要制定每個元素在某種數據塊,然後建立一個小系統,集成到jQuery的.class().attr()方法,所以,當你的代碼更新的一類,將數據添加到元件保持以前的類,

然後如果上一個類與正在設置的類不同,則觸發您的事件。

我說的整合是

var old_ClassFunc = $.fn.class; //Save it 

var $.fn.class = function() 
{ 
    if($(this).data('old-class')) 
    { 
     if($(this).data('class_callback'))# 
     { 
      $(this).data('class_callback')(this); 
     } 
    } 
    $(this).data('old-class',$(this).attr('class')); //Update Data 
    return old_class.apply(this,arguments); 
} 

那麼你可以不喜歡

$('element').data('class_callback',function(context){ 
    alert('Element class has changed'); 
}) 

希望這給你一些幫助

+1

-1對於「事件基於用戶操作」 – sbichenko 2013-12-18 16:59:42