From dcb8e0767fbf0a7a55f3b0045fd01b2532ea5441 Mon Sep 17 00:00:00 2001 From: Vojta Jina Date: Wed, 4 Apr 2012 08:12:39 -0700 Subject: [PATCH] fix(booleanAttrs): convert to boolean jQuery's attr() does not handle 0 as false, when it comes to boolean attrs. --- src/ng/directive/booleanAttrDirs.js | 2 +- test/ng/directive/booleanAttrDirSpecs.js | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/ng/directive/booleanAttrDirs.js b/src/ng/directive/booleanAttrDirs.js index 01134998e2a4..fee10ed86200 100644 --- a/src/ng/directive/booleanAttrDirs.js +++ b/src/ng/directive/booleanAttrDirs.js @@ -288,7 +288,7 @@ forEach(BOOLEAN_ATTR, function(propName, attrName) { return function(scope, element, attr) { attr.$$observers[attrName] = []; scope.$watch(attr[normalized], function(value) { - attr.$set(attrName, value); + attr.$set(attrName, !!value); }); }; } diff --git a/test/ng/directive/booleanAttrDirSpecs.js b/test/ng/directive/booleanAttrDirSpecs.js index aa84c1aed1bb..d58ffcedf907 100644 --- a/test/ng/directive/booleanAttrDirSpecs.js +++ b/test/ng/directive/booleanAttrDirSpecs.js @@ -23,6 +23,18 @@ describe('boolean attr directives', function() { })); + it('should properly evaluate 0 as false', inject(function($rootScope, $compile) { + // jQuery does not treat 0 as false, when setting attr() + element = $compile('')($rootScope) + $rootScope.isDisabled = 0; + $rootScope.$digest(); + expect(element.attr('disabled')).toBeFalsy(); + $rootScope.isDisabled = 1; + $rootScope.$digest(); + expect(element.attr('disabled')).toBeTruthy(); + })); + + it('should bind disabled', inject(function($rootScope, $compile) { element = $compile('')($rootScope) $rootScope.isDisabled = false;