diff options
| -rw-r--r-- | src/jqLite.js | 2 | ||||
| -rw-r--r-- | src/ng/location.js | 2 | ||||
| -rw-r--r-- | test/ng/locationSpec.js | 7 |
3 files changed, 9 insertions, 2 deletions
diff --git a/src/jqLite.js b/src/jqLite.js index 0abae3d7..958242cd 100644 --- a/src/jqLite.js +++ b/src/jqLite.js @@ -560,7 +560,7 @@ function createEventHandler(element, events) { } event.isDefaultPrevented = function() { - return event.defaultPrevented; + return event.defaultPrevented || event.returnValue == false; }; forEach(events[type || event.type], function(fn) { diff --git a/src/ng/location.js b/src/ng/location.js index 4c31d0ad..4efa019c 100644 --- a/src/ng/location.js +++ b/src/ng/location.js @@ -527,7 +527,7 @@ function $LocationProvider(){ var absHref = elm.prop('href'); var rewrittenUrl = $location.$$rewrite(absHref); - if (absHref && !elm.attr('target') && rewrittenUrl) { + if (absHref && !elm.attr('target') && rewrittenUrl && !event.isDefaultPrevented()) { event.preventDefault(); if (rewrittenUrl != $browser.url()) { // update location manually diff --git a/test/ng/locationSpec.js b/test/ng/locationSpec.js index cf7ceaf4..c4a88fd9 100644 --- a/test/ng/locationSpec.js +++ b/test/ng/locationSpec.js @@ -835,6 +835,12 @@ describe('$location', function() { jqLite(link).attr('href', 'http://host.com/base/'); browserTrigger(link, 'click'); expectRewriteTo($browser, 'http://host.com/base/'); + + jqLite(link). + attr('href', 'http://host.com/base/foo'). + bind('click', function(e) { e.preventDefault(); }); + browserTrigger(link, 'click'); + expect($browser.url()).toBe('http://host.com/base/'); } ); }); @@ -1372,6 +1378,7 @@ describe('$location', function() { expect(location.$$rewrite('http://other')).toEqual(undefined); expect(location.$$rewrite('http://server/pre/')).toEqual('http://server/pre/'); expect(location.$$rewrite('http://server/pre/#otherPath')).toEqual('http://server/pre/#otherPath'); + expect(location.$$rewrite('javascript:void(0)')).toEqual(undefined); }); }); |
