1
0
mirror of https://github.com/videojs/video.js.git synced 2024-11-26 08:51:09 +02:00

Merge pull request #660 from videojs/stable

Close GH-630: prevent default action for simple html5 media events. fixe...
This commit is contained in:
Steve Heffernan 2013-07-30 11:25:07 -07:00
commit 699c476575
2 changed files with 28 additions and 2 deletions

View File

@ -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.

View File

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