#10179 closed defect (fixed)
dojo.attr breaks with "class" on IE8
Reported by: | henrik | Owned by: | anonymous |
---|---|---|---|
Priority: | low | Milestone: | 1.3 |
Component: | HTML | Version: | 1.2.3 |
Keywords: | IE8 | Cc: | |
Blocked By: | Blocking: |
Description
This bug was on dojo 1.2.3. I have not checked other versions, it might be in others too.
In dojo html.js, line 1085 for 1.2.3 should be ieLT8 instead of d.isIE Because IE8 in "modern" mode uses the correct class instead of className, but dojo thinks not. Setting the css-class of elements is a very common operation, so this bug will break a lot of code, thus I have marked it as high priority.
This is the code fragment. One solution is to replace d.isIE with ieLT8 on line 1085. Or detect the actual bug instead of the browser version.
// var ieLT8 = d.isIE < 8; // // var _fixAttrName = function(/*String*/name){ // switch(name.toLowerCase()){ // case "tabindex": // // Internet Explorer will only set or remove tabindex // // if it is spelled "tabIndex" // // console.debug((dojo.isIE && dojo.isIE < 8)? "tabIndex" : "tabindex"); // return ieLT8 ? "tabIndex" : "tabindex"; // case "for": case "htmlfor": // // to pick up for attrib set in markup via getAttribute() IE<8 uses "htmlFor" and others use "for" // // get/setAttribute works in all as long use same value for both get/set // return ieLT8 ? "htmlFor" : "for"; // case "class" : //line 1085: // return d.isIE ? "className" : "class"; // default: // return name; // } // }
Below is an example of how to feature-detect this problem instead of relying on browser-detection.
var featureSniffClassNameAttributeIsClass = function () { var d = dojo.doc.createElement("div"); try { d.setAttribute("className", "c"); var h = d.outerHTML; // if setting className on a node alters the class, we are on IE6 or 7 var convertClassToClassName = ! /classname/.exec(h.toLowerCase()); return convertClassToClassName; } catch (e) { //probably we are on a non IE browser because an error occurred return false; } };
Change History (2)
comment:1 Changed 11 years ago by
Component: | Core → HTML |
---|---|
Milestone: | tbd → 1.3 |
Priority: | high → low |
Resolution: | → fixed |
severity: | blocker → normal |
Status: | new → closed |
comment:2 Changed 11 years ago by
Well, no support for IE8 is a good reason for IBM to upgrade dojo version on their latest Lotus Connections product. Thanks for a fast reply.
It works fine for me in 1.3 and trunk, I did
dojo.attr(dojo.body(), "class", "bill")
in the console and then checkeddojo.body().className
. I did manage to reproduce on 1.2, which BTW does not claim to support IE8 at all.