Re: document.write messages
- --- In firstname.lastname@example.org, "stevengrindle2002" <stevengrindle2002@...> wrote:
>document.write can be a form of eval.
> I get lot of messages about 'document.write' because I use it frequently. I would like to understand
> 1) Why does JSLint object to 'document.write'?
> 2) What should I do to fix my code?
> Example 1 of dozens of similar messages:
> Problem at line 15 character 5: document.write can be a form of eval.
> document.write(nbr+" is nbr<br />"); //absolute value
> Steven G.
From Crockford's JSlint instructions:
eval is evil
The eval method takes a string containing JScript code, compiles it and runs it, but the computing cost-effectiveness of starting an interpreter to compile it outweighs other far more lightweight methods that achieve exactly what you want.
Try obtaining a reference to the desired element where you want to place your text or HTML, and drop your code in with the easy non-standard way: elementReference.innerHTML = nbr+" is nbr<br />" or the standards way elementReference.appendTextNode(nbr+" is nbr").appendChild(document.createElement("br"));
- document.write() is evil because it affects the document as it's been
rendered. There are some (very,very few) instances when you might need
to do this.
I have used it recently to change a form on the client side depending on
document.writeln("<input id='contactFormSend' disabled='disabled'
value='Send Request' type='submit' />");
<input value="Send Request" type="submit" />
This isn't something that can easily be done on the server and allows
sent - at least, when the page was loaded. The server uses this to
determine the likelihood that the form has had minimal validation or
none at all and warn the user.
Using document.write or document.writeln as a debugging measure is
asking for trouble. Until recently (hang my head in shame) I relied on
Alert() or some concoction of DIVs. <shudders>
A far better solution is Firefox with the Firebug extension. Firebug can
write to a special console area:
console.log(var1, var2, object, ...);
and is very, very good at it too. You can even examine events objects
(for example) just by passing them like this:
Firebug allows you to decompose the entire event, method by property in
the console window which can be very handy indeed.