Как я могу запустить событие, если CSS-класс добавлен или изменен с помощью jQuery? Запускает ли изменение класса CSS change()
событие jQuery ?
jquery
css
jquery-events
user237060
источник
источник
Ответы:
Всякий раз, когда вы изменяете класс в вашем скрипте, вы можете использовать
trigger
для создания своего собственного события.но в противном случае нет, нет никакого запутанного способа вызвать событие, когда класс меняется.
change()
только срабатывает после того, как фокус оставляет вход, чей вход был изменен.Подробнее о триггерах jQuery
источник
changeColor
событие, и все те объекты, которые подписываются на это событие, могут реагировать соответствующим образом.ИМХО, лучшее решение - объединить два ответа @ RamboNo5 и @Jason
Я имею в виду переопределение функции addClass и добавление пользовательского события под названием
cssClassChanged
источник
$()
, когда вы добираетесь , когда начинается настоящее действие.cssClassChanged
событие с элементом, вы должны знать, что оно будет запущено, даже когда его ребенок изменит свой класс. Поэтому, если, например, вы не хотите запускать это событие для них, просто добавьте что-то вроде$("#YourExampleElementID *").on('cssClassChanged', function(e) { e.stopPropagation(); });
после привязки. В любом случае, действительно хорошее решение, спасибо!Если вы хотите обнаружить изменение класса, лучше всего использовать Mutation Observers, который дает вам полный контроль над любым изменением атрибута. Однако вам нужно определить слушателя самостоятельно и добавить его к элементу, который вы слушаете. Хорошо, что вам не нужно ничего запускать вручную после добавления слушателя.
В этом примере слушатель событий добавляется к каждому элементу, но в большинстве случаев вы этого не хотите (экономьте память). Добавьте этот слушатель "attrchange" к элементу, который вы хотите наблюдать.
источник
DOMMutationObserver
.Я бы предложил вам переопределить функцию addClass. Вы можете сделать это следующим образом:
источник
Просто подтверждение концепции:
Посмотрите на суть, чтобы увидеть некоторые аннотации и оставаться в курсе:
https://gist.github.com/yckart/c893d7db0f49b1ea4dfb
Использование довольно просто, просто добавьте новый слушатель на узел, который вы хотите наблюдать, и управляйте классами, как обычно:
источник
this[0]
неопределен ... просто заменить конец строки сvar oldClass
иvar newClass
со следующим назначением:= (this[0] ? this[0].className : "");
используя последнюю мутацию JQuery
// любой код, который обновляет div с классом required-entry, который находится в $ target как $ target.addClass ('search-class');
источник
change()
не срабатывает при добавлении или удалении класса CSS или изменении определения. Он срабатывает в обстоятельствах, например, когда выбрано или не выбрано значение поля выбора.Я не уверен, имеете ли вы в виду, что определение класса CSS изменено (что может быть сделано программно, но утомительно и обычно не рекомендуется) или класс добавлен или удален в элемент. Нет способа надежно зафиксировать это в любом случае.
Конечно, вы можете создать собственное мероприятие для этого, но это можно назвать только рекомендательным . Он не будет захватывать код, который не принадлежит вам.
В качестве альтернативы вы можете переопределить / заменить
addClass()
(и т. Д.) Методы в jQuery, но это не будет зафиксировано, когда это будет сделано через ванильный Javascript (хотя я думаю, вы могли бы также заменить эти методы).источник
Есть еще один способ, не вызывая пользовательское событие
Плагин jQuery для отслеживания изменений CSS в HTML-элементах. Автор Rick Strahl
Цитирование сверху
источник
Хороший вопрос. Я использую выпадающее меню Bootstrap, и мне нужно было выполнить событие, когда выпадающее меню Bootstrap было скрыто. Когда раскрывающийся список открыт, содержащий div с именем класса «button-group» добавляет класс «open»; и сама кнопка имеет расширенный атрибут aria, установленный в true. Когда раскрывающийся список закрыт, этот класс «open» удаляется из содержащего div, и aria-extended переключается с true на false.
Это привело меня к этому вопросу о том, как обнаружить изменение класса.
С помощью Bootstrap существуют «выпадающие события», которые можно обнаружить. Посмотрите "Dropdown Events" по этой ссылке. http://www.w3schools.com/bootstrap/bootstrap_ref_js_dropdown.asp
Вот быстрый и грязный пример использования этого события в выпадающем меню Bootstrap.
Теперь я понимаю, что это более конкретно, чем общий вопрос, который задают. Но я думаю, что другие разработчики, пытающиеся обнаружить открытое или закрытое событие с помощью Bootstrap Dropdown, найдут это полезным. Как и я, они могут сначала пойти по пути простой попытки обнаружить изменение класса элемента (что, очевидно, не так просто). Спасибо.
источник
Если вам нужно вызвать определенное событие, вы можете переопределить метод addClass (), чтобы запустить пользовательское событие с именем «classadded».
Вот как:
источник
Вы можете связать событие DOMSubtreeModified. Я добавляю пример здесь:
HTML
JavaScript
http://jsfiddle.net/hnCxK/13/
источник
если вы знаете, какое событие изменило класс, в первую очередь вы можете использовать небольшую задержку для того же события и установить флажок для класса. пример
http://jsfiddle.net/GuDCp/3/
источник
источник