2014-12-05 2 views
3

Мне нужно вызвать событие, когда я добавляю определенный класс на кнопку, но я не знаю, как заставить его слушать событие добавления класса.Функция jQuery fire при изменении класса элемента класса

У меня есть что-то вроде этого:

<script type="text/javascript"> 

$(document).ready(function() { 


    $(id_element).addClass("active"); 

    //this function will fire on add "active" class to "id_button" element 
    function fireOnActiveClass() { 
     //do something 
    } 


} 

</script> 

Я не могу потрогать код $(id_element).addClass("active");, по нескольким причинам.

В настоящее время я использую JQuery 1.7.2

Не могли бы вы сказать мне, как или которые мне нужно знать?

+1

[Mutation Observer] (https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver)? – Teemu

+1

Существует много разных способов сделать это, но вопрос в том, почему вам нужно это относительно вашего опубликованного кода, потому что, очевидно, вы уже знаете **, когда ** вы добавляете этот конкретный класс –

+0

Если вам не нужно поддерживать старые браузеры, вы может использовать событие анимации/перехода, используя фальшивую анимацию/переход и используя определенное правило CSS. Или расширьте метод 'addClass()' для запуска пользовательского события или ... –

ответ

1

Вы изменяете класс элемента управления в своем коде. Так почему бы просто не называть нажатие кнопки при изменении класса?

$(id_element).addClass("active"); 
$(id_button).click(); 

$(id_button).click(function() { 
    if ($(this).hasClass) { 
    //do something 

    } 
}); 
1

При изменении класса события не происходит. В качестве альтернативы можно вручную вызвать событие, когда вы программно изменить класс:

$(document).ready(function() { 
    $(id_element).addClass("active").trigger('classChange'); 
    $(id_element).on('classChange', function() { 
     // do stuff 
    }); 
}); 
+0

Зачем вам нужно запускать настраиваемое событие здесь? Просто вызовите метод, когда класс добавлен –

+0

@ A.Wolff Запуск настраиваемого события обеспечивает большую гибкость и позволяет прослушивать пузыри событий, возможно? Это также более расширяемо. – Terry

+0

Но поскольку вам все еще нужно запускать его, я не вижу здесь никакой цели (относительно этого конкретного примера) PS: ya относительно гибкости и, возможно, пузырящейся –

0

Другой способ будет вызывать функцию сразу после добавления класса как:

$.fn.classAdded = function() { 
    var $button = $(this); 
    if($button.hasClass('id_button')) { 
     // ... 
    } 
    return $button; 
} 

$(id_element).addClass("active").classAdded(); 
Смежные вопросы