From f37f0ea16edd4b487ef8812ff69a78d9a287fa60 Mon Sep 17 00:00:00 2001 From: Vojta Jina Date: Wed, 20 Jul 2011 01:32:29 +0200 Subject: feat(jqLite): add event.isDefaultPrevented() as jQuery Chrome's Event has defaultPrevented property, but other browsers haven't. This is workaround for other browsers - same as jQuery. --- src/jqLite.js | 14 ++++++++++++++ test/jqLiteSpec.js | 12 ++++++++++++ 2 files changed, 26 insertions(+) diff --git a/src/jqLite.js b/src/jqLite.js index 122684a5..6b954005 100644 --- a/src/jqLite.js +++ b/src/jqLite.js @@ -376,6 +376,20 @@ forEach({ if (!event.target) { event.target = event.srcElement || document; } + + if (isUndefined(event.defaultPrevented)) { + var prevent = event.preventDefault; + event.preventDefault = function() { + event.defaultPrevented = true; + prevent.call(event); + }; + event.defaultPrevented = false; + } + + event.isDefaultPrevented = function() { + return event.defaultPrevented; + }; + forEach(eventHandler.fns, function(fn){ fn.call(element, event); }); diff --git a/test/jqLiteSpec.js b/test/jqLiteSpec.js index 673bee78..aac5aeb5 100644 --- a/test/jqLiteSpec.js +++ b/test/jqLiteSpec.js @@ -443,6 +443,18 @@ describe('jqLite', function(){ browserTrigger(a, 'click'); }); + + it('should have event.isDefaultPrevented method', function() { + jqLite(a).bind('click', function(e) { + expect(function() { + expect(e.isDefaultPrevented()).toBe(false); + e.preventDefault(); + expect(e.isDefaultPrevented()).toBe(true); + }).not.toThrow(); + }); + + browserTrigger(a, 'click'); + }); }); -- cgit v1.2.3