Событие триггера jQuery, когда объекту присваивается класс - PullRequest
0 голосов
/ 10 ноября 2010

Я использую карусель jQuery, загруженную отсюда: http://www.thomaslanciaux.pro/jquery/jquery_carousel.htm

Он использует нумерацию страниц и применяет класс, называемый «активный», к текущему номеру страницы при нажатии на номер страницы. Я хочу, чтобы событие применялось, когда этот класс применяется, поскольку он также использует стрелки влево и вправо, чтобы применить класс к текущему номеру страницы.

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

$('.red').click(function() {
     $('#formred').attr('checked', 'checked');
 });

Я получил его на работу, но только при загрузке страницы:

 if ($('.red').hasClass('active')) {
      $('.red').trigger('click');
 }

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

Ответы [ 3 ]

2 голосов
/ 10 ноября 2010

РЕДАКТИРОВАТЬ: Если вам это нужно только по нажатию кнопки, а не для ее функции auto, вы можете просто поместить .delegate() на .carousel, как только она станет доступна, которая прослушиваетclick события на элементах 'a[role=button]'.

$('.carousel').delegate('a[role=button]', 'click', function() {

     // Because a button in the carousel was clicked, we know that
     //   one of the elements received the .active class. So we just
     //   need to find it.
     var $activeButton = $(this).closest('.carousel').find('.active');

     // Not sure how the .red class from your question factors in, but you
     //   can test the $activeButton to see if it has that class
     if( $activeButton.hasClass('red') ) {
         $('#formred').attr('checked', 'checked');
     }
});

Опять же, это будет работать только для событий щелчка на кнопках, а не если оно установлено на auto rotate.Не уверен, что это то, что вам нужно.


Если необходимо, есть плагин livequery, который будет запускать код при модификации DOM через jQuery.

http://brandonaaron.net/code/livequery/docs

$('.someClass').livequery( function() {
    // your code
});

Если вы передадите второй аргумент функции, он запустится после удаления класса (или элемента).

$('.someClass').livequery( function() {
    // your code when adding
}, function() {
    // your code when removing
});
0 голосов
/ 05 ноября 2011

Что бы я сделал, это:

1-отключить автозапуск

2 - создать setInterval, который запускает триггер («щелчок») по нумерации карусели

3 - и, конечно, внутри вы можете сделать больше, чем просто запустить слайды

0 голосов
/ 10 ноября 2010

Не удалось создать общий обработчик событий, например:

function changePage( pageNum, nextprev ){
  if( nextprev ) pageNum = activePage + nextprev;

  // show the next page

  $('someElement').addClass('active');
}

, а затем установить для этого события как щелчок, так и нажатие клавиши:

$(...).keydown( function(){
  changePage( [1 or -1, depending on input], true );
});

$(...).click( function(){
  changePage( [clicked page], false );
});
...