diff options
| -rw-r--r-- | src/jqLite.js | 5 | ||||
| -rw-r--r-- | src/service/compiler.js | 18 | ||||
| -rw-r--r-- | test/directive/inputSpec.js | 23 | ||||
| -rw-r--r-- | test/jqLiteSpec.js | 7 | 
4 files changed, 42 insertions, 11 deletions
diff --git a/src/jqLite.js b/src/jqLite.js index 986d0002..79f22e62 100644 --- a/src/jqLite.js +++ b/src/jqLite.js @@ -328,7 +328,7 @@ forEach('multiple,selected,checked,disabled,readOnly,required'.split(','), funct    BOOLEAN_ATTR[lowercase(value)] = value;  });  var BOOLEAN_ELEMENTS = {}; -forEach('input,select,option,textarea,button'.split(','), function(value) { +forEach('input,select,option,textarea,button,form'.split(','), function(value) {    BOOLEAN_ELEMENTS[uppercase(value)] = true;  }); @@ -394,8 +394,7 @@ forEach({          }        } else {          return (element[name] || -                 element.getAttribute(name) !== null && -                 (msie < 9 ? element.getAttribute(name) !== '' : true)) +                 (element.attributes.getNamedItem(name)|| noop).specified)                 ? lowercasedName                 : undefined;        } diff --git a/src/service/compiler.js b/src/service/compiler.js index 6cbfc9d3..4ac01a7c 100644 --- a/src/service/compiler.js +++ b/src/service/compiler.js @@ -378,17 +378,19 @@ function $CompileProvider($provide) {            for (var attr, name, nName, value, nAttrs = node.attributes,                     j = 0, jj = nAttrs && nAttrs.length; j < jj; j++) {              attr = nAttrs[j]; -            name = attr.name; -            nName = directiveNormalize(name.toLowerCase()); -            attrsMap[nName] = name; -            attrs[nName] = value = trim((msie && name == 'href') +            if (attr.specified) { +              name = attr.name; +              nName = directiveNormalize(name.toLowerCase()); +              attrsMap[nName] = name; +              attrs[nName] = value = trim((msie && name == 'href')                  ? decodeURIComponent(node.getAttribute(name, 2))                  : attr.value); -            if (isBooleanAttr(node, nName)) { -              attrs[nName] = true; // presence means true +              if (isBooleanAttr(node, nName)) { +                attrs[nName] = true; // presence means true +              } +              addAttrInterpolateDirective(node, directives, value, nName) +              addDirective(directives, nName, 'A', maxPriority);              } -            addAttrInterpolateDirective(node, directives, value, nName) -            addDirective(directives, nName, 'A', maxPriority);            }            // use class as directive diff --git a/test/directive/inputSpec.js b/test/directive/inputSpec.js index 2a7244c9..22c77f53 100644 --- a/test/directive/inputSpec.js +++ b/test/directive/inputSpec.js @@ -316,6 +316,29 @@ describe('input', function() {    }); +  it('should not set readonly or disabled property on ie7', function() { +    this.addMatchers({ +      toBeOff: function(attributeName) { +        var actualValue = this.actual.attr(attributeName); +        this.message = function() { +          return "Attribute '" + attributeName + "' expected to be off but was '" + actualValue + +            "' in: " + angular.mock.dump(this.actual); +        } + +        return !actualValue || actualValue == 'false'; +      } +    }); + +    compileInput('<input type="text" ng-model="name" name="alias"/>'); +    expect(inputElm.prop('readOnly')).toBe(false); +    expect(inputElm.prop('disabled')).toBe(false); + +    expect(inputElm).toBeOff('readOnly'); +    expect(inputElm).toBeOff('readonly'); +    expect(inputElm).toBeOff('disabled'); +  }); + +    it('should cleanup it self from the parent form', function() {      compileInput('<input ng-model="name" name="alias" required>'); diff --git a/test/jqLiteSpec.js b/test/jqLiteSpec.js index 417b912c..fbe6edcb 100644 --- a/test/jqLiteSpec.js +++ b/test/jqLiteSpec.js @@ -268,6 +268,13 @@ describe('jqLite', function() {        var elm = jqLite('<div class="any">a</div>');        expect(elm.attr('non-existing')).toBeUndefined();      }); + +    it('should return undefined for non-existing attributes on input', function() { +      var elm = jqLite('<input>'); +      expect(elm.attr('readonly')).toBeUndefined(); +      expect(elm.attr('readOnly')).toBeUndefined(); +      expect(elm.attr('disabled')).toBeUndefined(); +    });    });  | 
