mirror of
				https://github.com/videojs/video.js.git
				synced 2025-10-31 00:08:01 +02:00 
			
		
		
		
	Close GH-630: prevent default action for simple html5 media events. fixes #573, fixes #620 (duplicate bug).
This commit is contained in:
		
				
					committed by
					
						 Steve Heffernan
						Steve Heffernan
					
				
			
			
				
	
			
			
			
						parent
						
							fdf7f4f228
						
					
				
				
					commit
					15544c3d05
				
			| @@ -277,8 +277,9 @@ vjs.trigger = function(elem, event) { | ||||
|     elemData.dispatcher.call(elem, event); | ||||
|   } | ||||
|  | ||||
|   // Unless explicitly stopped, recursively calls this function to bubble the event up the DOM. | ||||
|   if (parent && !event.isPropagationStopped()) { | ||||
|   // Unless explicitly stopped or the event does not bubble (e.g. media events) | ||||
|   // recursively calls this function to bubble the event up the DOM. | ||||
|   if (parent && !event.isPropagationStopped() && event.bubbles !== false) { | ||||
|     vjs.trigger(parent, event); | ||||
|  | ||||
|   // If at the top of the DOM, triggers the default action unless disabled. | ||||
|   | ||||
| @@ -89,3 +89,28 @@ test('should stop immediate propagtion', function(){ | ||||
|  | ||||
|   vjs.trigger(el, 'test'); | ||||
| }); | ||||
|  | ||||
| test('should bubble up DOM unless bubbles == false', function(){ | ||||
|   expect(3); | ||||
|  | ||||
|   var outer = document.createElement('div'); | ||||
|   var inner = outer.appendChild(document.createElement('div')); | ||||
|  | ||||
|   // Verify that if bubbles === true, event bubbles up dom. | ||||
|   vjs.on(inner, 'bubbles', function(e){ | ||||
|     ok(true, 'Inner listener fired'); | ||||
|   }); | ||||
|   vjs.on(outer, 'bubbles', function(e){ | ||||
|     ok(true, 'Outer listener fired'); | ||||
|   }); | ||||
|   vjs.trigger(inner, { type:'bubbles', target:inner, bubbles:true }); | ||||
|  | ||||
|   // Only change 'bubbles' to false, and verify only inner handler is called. | ||||
|   vjs.on(inner, 'nobub', function(e){ | ||||
|     ok(true, 'Inner listener fired'); | ||||
|   }); | ||||
|   vjs.on(outer, 'nobub', function(e){ | ||||
|     ok(false, 'Outer listener fired'); | ||||
|   }); | ||||
|   vjs.trigger(inner, { type:'nobub', target:inner, bubbles:false }); | ||||
| }); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user