#3803 closed defect (fixed)
Coding error with for loop n dojo.widget.RichText
Reported by: | guest | Owned by: | liucougar |
---|---|---|---|
Priority: | high | Milestone: | |
Component: | Editor | Version: | 0.9 |
Keywords: | for loop wrong usage | Cc: | |
Blocked By: | Blocking: |
Description
I noticed this bug while using the Editor2 widget programtically on an imported dom element that i retrieved using ajax.
The error is in dojo/widget/RichText.js near line: 203
The current code is:
var formats = ["p", "pre", "address", "h1", "h2", "h3", "h4", "h5", "h6", "ol", "div", "ul"]; var localhtml = ""; for (var i=0;i<formats.length;i++) { if (formats[i].charAt(1) != "l") { localhtml += "<" + formats[i] + "><span>content</span></" + formats[i] + ">"; } else { localhtml += "<" + formats[i] + "><li>content</li></" + formats[i] + ">"; } }
The problem is in the for(var i in formats) loop.
The for in loop does not iterate over all the elements in the array: It iterates over all the properties of the formats object. See the ecmascript spec: http://developer.voicegenie.com/ECMAScript.php?PHPSESSID=37522004f17b61b2297b970817e7d870#Statements
The format array object also has a property formats.length. This property is a function object and does not have an charAt function.
But within the loop the if the code tries to execute the charAt function:
if (formats[i].charAt(1) != "l") {...}
This yields an error in MSIE 7.0, MSIE 6.0 and the latest Opera version... I am not sure if the opera version complained about the same bug, but i think so.
The workaround
The workaround is easy: use the normal for loop:
for(var i=0;i<formats.length;i++)
So it is important NOT to use for-in loops when iterating over arrays!!!!
Greetings Tjerk Wolterink [email protected]…
I hate to use the GUEST account! Mail me : i want an account.. please!
Change History (3)
comment:1 Changed 14 years ago by
comment:2 Changed 13 years ago by
Resolution: | → fixed |
---|---|
Status: | new → closed |
note: this has already been fixed in 0.9, but it's an easy fix for 0.4.4