@@ -736,7 +736,6 @@ Raven.prototype = {
736736 // TODO: if somehow user switches keypress target before
737737 // debounce timeout is triggered, we will only capture
738738 // a single breadcrumb from the FIRST target (acceptable?)
739-
740739 return function ( evt ) {
741740 var target = evt . target ,
742741 tagName = target && target . tagName ;
@@ -755,7 +754,7 @@ Raven.prototype = {
755754 }
756755 clearTimeout ( timeout ) ;
757756 self . _keypressTimeout = setTimeout ( function ( ) {
758- self . _keypressTimeout = null ;
757+ self . _keypressTimeout = null ;
759758 } , debounceDuration ) ;
760759 } ;
761760 } ,
@@ -841,13 +840,24 @@ Raven.prototype = {
841840
842841 // More breadcrumb DOM capture ... done here and not in `_instrumentBreadcrumbs`
843842 // so that we don't have more than one wrapper function
844- var before ;
843+ var before ,
844+ clickHandler ,
845+ keypressHandler ;
846+
845847 if ( autoBreadcrumbs && autoBreadcrumbs . dom && ( global === 'EventTarget' || global === 'Node' ) ) {
846- if ( evtName === 'click' ) {
847- before = self . _breadcrumbEventHandler ( evtName ) ;
848- } else if ( evtName === 'keypress' ) {
849- before = self . _keypressEventHandler ( ) ;
850- }
848+ // NOTE: generating multiple handlers per addEventListener invocation, should
849+ // revisit and verify we can just use one (almost certainly)
850+ clickHandler = self . _breadcrumbEventHandler ( 'click' ) ;
851+ keypressHandler = self . _keypressEventHandler ( ) ;
852+ before = function ( evt ) {
853+ // need to intercept every DOM event in `before` argument, in case that
854+ // same wrapped method is re-used for different events (e.g. mousemove THEN click)
855+ // see #724
856+ if ( evt . type === 'click' )
857+ return clickHandler ( evt ) ;
858+ else if ( evt . type === 'keypress' )
859+ return keypressHandler ( evt ) ;
860+ } ;
851861 }
852862 return orig . call ( this , evtName , self . wrap ( fn , undefined , before ) , capture , secure ) ;
853863 } ;
0 commit comments