2012-03-29 6 views
1

Ich habe ein benutzerdefiniertes Ereignis namens slides.swap erstellt, aber ich möchte verhindern, dass das Ereignis von click in trigger() kommt. Es funktioniert nicht. Wie mache ich das von der trigger()? Ich weiß, ich kann es in der click Funktion verhindern, aber ich will nur alles "gekapselt".Ist es möglich, .preventDefault() in trigger() in jQuery

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

Vielen Dank

+0

Ich verstehe nicht, warum Sie dieses benutzerdefinierte Ereignis benötigen. Können Sie die anonyme Funktion nicht direkt an das click-Ereignis binden? – alextercete

Antwort

2

Du nennt preventDefault() auf dem Event-Objekt für das swap Ereignis, die verschiedene zum click Ereignisse. Versuchen Sie, preventDefault() für das Ereignisobjekt aufzurufen, das Sie an den Handler slides.swap übergeben;

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

Es muss jedoch gesagt werden, dass dies nicht großartig Programmdesign ist. Es ist falsch eine andere Ereigniskette/Objekt von einem anderen zu manipulieren.

+0

Danke für deine Antwort @Matt. Wie kann ich mein Programm besser gestalten, wenn ich fragen darf? – Shaoz

+0

@Shaoz: Ich kann nicht sehen, was der funktionale Unterschied zwischen dem Abbrechen des Ereignisses innerhalb des 'slides.swap'-Handlers oder des' click' Handlers ist? Es scheint die beste und richtige Option zu sein, dies innerhalb des "Click" -Handlers zu tun. – Matt

+0

Cool, ich denke, ich bleibe beim Abbrechen von "Klick" -Handler, wie du gesagt hast. Danke für deine Tipps. – Shaoz

Verwandte Themen