JQuery триггер стека событий с течением времени

0

У меня есть общий вопрос об определении клиентских событий и триггера:

jQuery(document).on('btn.hover', function () {
    jQuery('.orange_bubble').hover(function () {
        jQuery(this).addClass('hover');
    }, function () {
        jQuery(this).removeClass('hover');
    });
});

Теперь я могу вызвать событие триггера, чтобы запустить это событие один раз.

jQuery(document).trigger('btn.hover');

Если я создаю контент поверх ajax или через js, мне нужно переподчинить событие на новые элементы:

поэтому я запускаю его снова:

$.ajax{
   bla
   success: {
      jQuery(document).trigger('btn.hover');
    }
}

Как я могу сделать это без укладки событий. У меня есть эта проблема прямо сейчас. Я использую некоторые клиентские события, и иногда им приходится переучивать все элементы, но просто одно время и не складывать.

Какая самая лучшая практика для того, чтобы уволить события однажды? Если они установлены на некоторые элементы в dom?

спасибо для справки

Теги:
triggers
stack

2 ответа

1
Лучший ответ

.hover() - это ярлык для использования событий mouseenter и mouseleave, но один из недостатков заключается в том, что он не может использоваться для регистрации делегированных обработчиков, поэтому вместо использования .hover() используйте события напрямую.

Поэтому постарайтесь

jQuery(document).on({
    mouseenter: function () {
        jQuery(this).addClass('hover');
    },
    mouseleave: function () {
        jQuery(this).removeClass('hover');
    }
}, '.orange_bubble')
  • 0
    работает перфект. Это какие-то другие решения с триггером?
  • 0
    Ваш ответ потрясающий, я пишу какой-то триггер к этому, и он отлично работает!
1

Прежде всего вам не нужно переписывать событие на вновь добавленные элементы, если вы используете делегирование событий. На странице JQuery

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

вы можете использовать что-то вроде:

$( "//container of .orange_bubble elements" ).on( "hover", ".orange_bubble", function() {
  //your content
});

Это также предотвратит "укладку" событий

  • 0
    делегация это ответ .. хорошо :) круто

Ещё вопросы

Сообщество Overcoder
Наверх
Меню