From 25885e07b2683601a20481d614d282ded419793e Mon Sep 17 00:00:00 2001 From: John Resig Date: Mon, 22 Dec 2008 01:57:06 +0000 Subject: [PATCH] Added support for bubbling triggered events. --- src/event.js | 6 ++++++ test/unit/event.js | 36 +++++++++++++++++++++++++++++++++++- 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/src/event.js b/src/event.js index 9d06457..8fb77a9 100644 --- a/src/event.js +++ b/src/event.js @@ -212,6 +212,12 @@ jQuery.event = { if ( (!fn || (jQuery.nodeName(elem, 'a') && type == "click")) && elem["on"+type] && elem["on"+type].apply( elem, data ) === false ) val = false; + if ( donative !== false && val !== false ) { + var parent = elem.parentNode || elem.ownerDocument; + if ( parent ) + jQuery.event.trigger(type, data, parent, donative); + } + // Extra functions don't get the custom event object if ( event ) data.shift(); diff --git a/test/unit/event.js b/test/unit/event.js index 642ba5e..eb9af7a 100644 --- a/test/unit/event.js +++ b/test/unit/event.js @@ -198,6 +198,40 @@ test("trigger() shortcuts", function() { }).load(); }); +test("trigger() bubbling", function() { + expect(14); + + var doc = 0, html = 0, body = 0, main = 0, ap = 0; + + jQuery(document).bind("click", function(){ doc++; }); + jQuery("html").bind("click", function(){ html++; }); + jQuery("body").bind("click", function(){ body++; }); + jQuery("#main").bind("click", function(){ main++; }); + jQuery("#ap").bind("click", function(){ ap++; return false; }); + + jQuery("html").trigger("click"); + equals( doc, 1, "HTML bubble" ); + equals( html, 1, "HTML bubble" ); + + jQuery("body").trigger("click"); + equals( doc, 2, "Body bubble" ); + equals( html, 2, "Body bubble" ); + equals( body, 1, "Body bubble" ); + + jQuery("#main").trigger("click"); + equals( doc, 3, "Main bubble" ); + equals( html, 3, "Main bubble" ); + equals( body, 2, "Main bubble" ); + equals( main, 1, "Main bubble" ); + + jQuery("#ap").trigger("click"); + equals( doc, 3, "ap bubble" ); + equals( html, 3, "ap bubble" ); + equals( body, 2, "ap bubble" ); + equals( main, 1, "ap bubble" ); + equals( ap, 1, "ap bubble" ); +}); + test("unbind(event)", function() { expect(8); var el = jQuery("#firstp"); @@ -400,4 +434,4 @@ test("event properties", function() { start(); }).click(); }); -*/ \ No newline at end of file +*/ -- 1.7.10.4