Можно ли использовать .preventDefault () в триггере () в JQuery - PullRequest
1 голос
/ 29 марта 2012

Я создал пользовательское событие с именем slides.swap, но я хочу предотвратить поступление события из click в trigger(). Это не работает. Как мне это сделать с trigger()? Я знаю, что могу предотвратить это с помощью функции click, но я просто хочу сохранить все "инкапсулированным".

JS:

tabs.on('click', 'a', function(e){
  $(this).trigger('slides.swap', e);
});

//Custome event 
tabs.find('a').bind('slides.swap', function(e){
   var self = $(this),
       selfIndex = self.parent().index(),
       targetSlide = slides.eq(selfIndex);

   e.preventDefault(); //somehow this doesn't work

   //fade in/out slides
   slides.filter('.active').stop(true, false).fadeOut(speed, function(){
      $(this).removeClass('active'); 
   });
   targetSlide.stop(true, false).fadeIn(speed).addClass('active');
   tabs.removeClass('selected');
   self.parent().addClass('selected');
});

Большое спасибо

1 Ответ

2 голосов
/ 29 марта 2012

Вы вызываете preventDefault() для объекта Event для события swap, которое отличается от события click.Попробуйте вызвать preventDefault() для объекта события, который вы передаете обработчику slides.swap;

tabs.find('a').bind('slides.swap', function(e, clickEvent){
    if (typeof clickEvent === "object" && typeof clickEvent.preventDefault === "function") { // Check the parameter was provided and that it was an event object.
        clickEvent.preventDefault();
    }

    // everything else
});

Следует сказать, что это не очень хороший дизайн программы. неправильно манипулировать другой цепочкой событий / объектом из другого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...