From 1cc0e4173de01d6c4103910d231a24b2834f4d91 Mon Sep 17 00:00:00 2001 From: Misko Hevery Date: Mon, 19 Mar 2012 12:20:57 -0700 Subject: bug(ie7): incorrectly set all inputs to disabled In ie7 all of the input fields are set to readonly and disabled, because ie7 enumerates over all attributes even if the are not declared on the element. --- src/jqLite.js | 5 ++--- src/service/compiler.js | 18 ++++++++++-------- 2 files changed, 12 insertions(+), 11 deletions(-) (limited to 'src') 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 -- cgit v1.2.3