2012-03-29 4 views
1

slides.swapというカスタムイベントを作成しましたが、trigger()clickからのイベントを防ぐ必要があります。動いていない。 trigger()からどうすればよいですか? 私はclick機能でそれを防ぐことができますが、私はすべてを "カプセル化"しておきたいと思います。jQueryのtrigger()で.preventDefault()を使用することは可能ですか

JS:あなたはclickイベントに異なるあるswapイベントのイベントオブジェクトにpreventDefault()を呼んでいる

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'); 
}); 

感謝

+0

このカスタムイベントがなぜ必要なのかわかりません。無名関数を直接clickイベントにバインドできませんでしたか? – alextercete

答えて

2

slides.swapハンドラに渡すイベントオブジェクトに対してpreventDefault()を呼び出してみてください。

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 
}); 

これは素晴らしいプログラム設計ではありませんが、これを言う必要があります。他のイベントチェーン/オブジェクトを別のものから操作するには、が間違っています。です。

+0

@Mattさん、ありがとうございます。それでは、どうすれば私のプログラムをより良く設計できますか? – Shaoz

+0

@Shaoz: 'slides.swap'ハンドラ内のイベントを取り消すか、' click'ハンドラの間に機能的な違いがあるのか​​分かりません。 'click'ハンドラの中でそれを行うことは、最良かつ正しいオプションのようです。 – Matt

+0

あなたが言ったように、私は 'クリック 'ハンドラからキャンセルすることに固執すると思います。あなたのヒントをありがとう。 – Shaoz

関連する問題