comp.lang.javascript FAQ - 9.86 - 2007-10-03

1 meta-FAQ meta-questions

2 comp.lang.javascript tips

2.1 Which newsgroups deal with javascript?
2.2 What questions are off-topic for clj?
2.3 What do I have to do before posting to clj?
2.4 Why was my post not answered?
2.5 How do I direct someone to this FAQ?
2.6 What is ECMAScript?
2.7 What is JScript?
2.8 What are object models?
2.9 What is the document object model?
2.10 Internationalization and Multinationalization in javascript.
2.11 I have a question that is not answered in here or in any of the resources mentioned here but I'm sure it has been answered in clj. Where are the clj archives located?
2.12 What does the future hold for ECMAScript?

3 javascript resources

3.1 What books cover javascript?
3.2 What online resources are available?

4 Quick Answers

4.1 How do I protect my javascript code?
4.2 How can I disable the back button in a web browser?
4.3 How can I access the client-side filesystem?
4.4 How can I see in javascript if a web browser accepts cookies?
4.5 How can I prevent access to a web page by using javascript?
4.6 How do I convert a Number into a String with exactly 2 decimal places?
4.7 Why does simple decimal arithmetic give strange results?
4.8 How do I communicate between frames in a web browser?
4.9 How do I find the size of the window/browser canvas area?
4.10 How do I check to see if a childwindow is open, before opening another?
4.11 Why does framename.print() not print the correct frame in IE?
4.12 Why does K = parseInt('09') set K to 0?
4.13 How do I get the value of a form control?
4.14 How do I close a window and why does it not work on the first one?
4.15 How do I modify the current page in a browser?
4.16 How do I trim whitespace - LTRIM/RTRIM/TRIM?
4.17 How do I force a reload from the server/prevent caching?
4.18 How do I get a perl/asp/php variable into client-side js?
4.19 Why do I get permission denied when accessing a frame/window?
4.20 How do I make a 10 second delay?
4.21 Why does 1+1 equal 11? or How do I convert a string to a number?
4.22 How do I generate a random integer from 1 to N?
4.23 How do I change print settings with window.print()?
4.24 I have <a href="javascript:somefunction()"> what ... ?
4.25 My element is named myselect[] , how do I access it?
4.26 How do I detect Opera/Netscape/IE?
4.27 How do I disable the right mouse button?
4.28 How do I change the confirm box to say yes/no or default to cancel?
4.29 How do I log-out a user when they leave my site?
4.30 How do I format the Last-Modified date with javascript?
4.31 Why are my rollovers so slow?
4.32 How do I change the text in the url/location bar?
4.33 How do I prompt a "Save As" dialog for an accepted mime type?
4.34 How do I run a server side script?
4.35 I have window.status="Moomin"; why doesn't the statusbar change?
4.36 How do I modify the current browser window?
4.37 How do I POST a form to a new window?
4.38 How do I download a page to a variable?
4.39 How do I access a property of an object using a string?
4.40 When should I use eval?
4.41 Why doesn't the global variable "divId" always refer to the element with id="divId"?
4.42 How do I open a new window with javascript?
4.43 How do I get my browser to report javascript errors?
4.44 What is AJAX?

5 Comments and Suggestions

5.1 Why do some posts have <FAQENTRY> in them ?
5.2 How do I make a suggestion?

1 meta-FAQ meta-questions

You are reading the comp.lang.javascript meta-FAQ, version 9.86. It is available on the web at http://www.jibbering.com/faq/index.html in HTML form.

This is the official comp.lang.javascript (clj) FAQ. Or, more accurately, the meta-FAQ. It mainly provides URLs to further information about javascript, and some hints and tips to make your stay in comp.lang.javascript more enjoyable.

This document was created for three reasons: to help reduce the high levels of noise on clj, to provide a resource for people new to javascript, and to point to locations that contain valuable javascript resources.

Each day, one section of the FAQ is posted for review and questions, and as a reminder that the FAQ is available.

To cope with a desire for additional explanation and detail relating to some aspects of the FAQ, an additional resource is available at:- http://www.jibbering.com/faq/faq_notes/faq_notes.html It has been provided separately to avoid increasing the size of the FAQ to a point where it would be unreasonable to post it to the group.

Conventions used in the HTML version.

If your browser supports CSS, and follows our Suggestions, we use these conventions to denote various things:

Pages linked to from within a blue dashed line were updated since the last publication of the comp.lang.javascript FAQ (2007-10-03). Links contained in a red dotted line were unavailable at the time of publication.

Boxes with a light blue background contain links to more information on the question discussed. Code samples are given in a yellow background.

2 comp.lang.javascript tips

2.1 Which newsgroups deal with javascript?

The official Usenet newsgroup dealing with javascript is comp.lang.javascript . There are other newsgroups but many of them are not carried by most news feeds. clj is an unmoderated newsgroup.

2.2 What questions are off-topic for clj?

The comp.lang.javascript newsgroup deals with ECMAScript languages, so any questions about JavaScript or JScript are welcome. However, the majority of questions sent to this group relates to javascript in a web browser. If you are experiencing issues with a particular browser, or the host is not a browser at all, please make this information clear.

Javascript and Java are two completely different languages. Java questions should be asked in one of the comp.lang.java.* newsgroups; they are not appropriate for clj (as Java and javascript are distinct programming languages with only superficial similarities due to sharing a C-like syntax and some of the characters in their names).

Questions dealing with other scripting languages, such as VBScript, PerlScript or CGI scripting are also off-topic, as are HTML-only or CSS-only questions.

Questions that are specific to Microsoft's JScript may also be appropriately asked at: microsoft.public.scripting.jscript

The comp.lang.javascript newsgroup charter is included in http://www.jibbering.com/faq/faq_notes/cljs_charter.html

2.3 What do I have to do before posting to clj?

Before posting to clj, you should thoroughly read this document. You should also check the resources mentioned in section 3 and the Quick Answers in section 4. Read FYI28/RFC1855 http://www.ietf.org/rfc/rfc1855.txt on Usenet and http://www.jibbering.com/faq/faq_notes/clj_posts.html . Also you should read all appropriate posts to the clj newsgroup for several days. Most questions come up at least once every other day and people can get annoyed of answering them repeatedly.

Please state your question as clearly and concisely as possible, as this will make it far easier for the other readers of the group to understand your problems and suggest possible solutions. Use the Subject: of your post to indicate the type of problem you have, but include the question in the body as well. 'Help!' or 'I hate Netscape!' are not nearly as useful to contributors who do not read every post as 'parseInt("09")!=9'.

Has the same question already been posted that day? - if it has wait to see if the answers to that solve your problem.

Include the script you have been working on (or URL) - indicate the problem spots and/or previous attempts. Try to limit the length of your post by removing extraneous page elements, but avoid removing script unless you are sure it is not an issue. If the script is long though, please do not post the full script and just provide a link. As a guide more than 500 lines for a post is not normally a good idea in any circumstances. A mention of which platforms and browsers are used or are giving problems is also necessary.

Post in plain-text only. Do not post using HTML. If you have to include your script, paste it in to your post in plain-text. Do not uuencode it or attach it using MIME. There is good reason for this request: many newsreaders do not read HTML or MIME, and this limits the number of people who could help you. Test posts belong in test newsgroups (they have "test" in their names). Make sure your code is executable as transmitted. Use line breaks to keep the posting agent from wrapping code incorrectly.

When replying to a message on the group quote the minimum of the preceding messages that is sufficient to provide context for the reply but trim the remainder, and add your comments below the pertinent section of quoted material, as per FYI28/RFC1855 (never top post).

Don't ask, or at least expect, to be emailed individually. Some individuals run scams for the purpose of collecting active email addresses and many won't risk being victimized. If you have circumstances that won't allow you to read clj for the follow-up, explain what they are and ask to be CC'ed a copy. You also might try http://groups.google.com/group/comp.lang.javascript/topics to read replies.

Don't expect to be able to e-mail contributors to the group privately. E-mail addresses are often obscured, fictional or unmonitored spam sinks (this is an increasingly normal (and even unofficially recommended) practice as open e-mail addresses in news articles will be both the target of spam and used as fake sender's addresses in spam to third parties).

Don't take flames too seriously, and don't start a thread complaining about rude or flippant responses. There is already enough noise in clj. Keep a sense of humour while posting and reading and everything will be a lot more enjoyable.

Remember that it is not the job of posters here to help you. The majority of regular posters here do so voluntarily in their free time. They have good days and bad days just like everyone else.

clj is a technical group: the posting of job adverts and commercial adverts are not welcome. Job postings should go to an appropriate regional jobs group. Announcements of products of particular relevance to javascript are welcome, but not more often than once per major release, and then post a short link to the product's webpage.

Please do not post copyrighted material to clj without permission from the copyright holder.

2.4 Why was my post not answered?

This could be for several reasons:

If it is not one of these, then after a few days consider reposting after checking http://groups.google.com/group/comp.lang.javascript/topics for replies. Make sure the post is phrased well, and everything needed to answer is correct, and the subject is appropriate.

2.5 How do I direct someone to this FAQ?

This document is posted to clj very frequently. There should be no reason to direct someone to it. However, if someone asks a question answered in this FAQ or in one of the resources listed herein, please let them know their question is answered in the FAQ and that the FAQ can be found at http://www.jibbering.com/faq/

2.6 What is ECMAScript?

http://www.ecma-international.org/publications/standards/Ecma-262.htm ECMAScript is the international standard for javascript. JScript 3.0 and JavaScript 1.2 (available with version 4. browsers) are more or less ECMAScript compliant. In addition ECMA 327 defines the Compact Profile of ECMAScript by describing the features from ECMA 262 that may be omitted in some resource-constrained environments. Note that ECMAScript did not attempt to standardize the document object model.

The current edition is ECMA-262, 3rd Edition. There is some support for this edition in JScript 5.0 and JavaScript 1.3. JScript 5.5 and JavaScript 1.5, in Netscape 6.1 and later, are compliant (JavaScript 1.5 in Netscape 6 missed some methods).

2.7 What is JScript?

JScript is Microsoft's implementation of ECMAScript.

Questions that are specific to Microsoft's JScript may also be appropriately asked at: microsoft.public.scripting.jscript

2.8 What are object models?

Object models (OMs) are not part of the javascript language: they are provided by the host to allow javascript (or other scripting language) to communicate with the host. An object model may allow javascript to access a file system, or control a nuclear power station. The most commonly used object models via javascript are provided by Active Server Pages, Server Side JavaScript, and the Windows Script Host. The most common of all of course is the Document Object Model (DOM) provided by web browsers. Other document types such as SVG also define scriptable DOMs, mostly as extensions of the W3C Core DOM specification designed for use with XML documents.

2.9 What is the document object model?

This is the collection of objects provided by each browser. Basically, any object in the window hierarchy is part of the DOM. This means that document.writeln(), for example, is not a javascript method but is, in fact, a method provided by the DOM. The DOM has been standardised by the World Wide Web Consortium (W3C); however, like all W3C standards, browser support is not yet complete. Most cross-browser coding problems come from slightly different implementations of the DOM in the different browsers. W3 DOM FAQ http://www.w3.org/DOM/faq.html

The W3C has worked on three versions of the DOM to date. The third version has not yet achieved the status of a recommendation http://www.w3.org/DOM/ .

2.10 Internationalization and Multinationalization in javascript.

Internationalization means using one form which is both acceptable and understood everywhere. By default, javascript has no such features; but if an international standard exists it can be coded for.

For example, there is an international standard for numeric Gregorian date format; but there is none for decimal and thousands separators.

Multinationalization means using different forms for different nations. It cannot work well in general, because it requires a knowledge of all national preferences and the ability to choose the right one, in an environment where many systems are inappropriately set anyway.

JavaScript has a few Multinationalisation features. The various toString() methods are all implementation dependent, but tend to use either UK or US settings (not necessarily correctly). ECMAScript Ed. 3 introduced some capabilities, including the toLocaleString() method which should create a string based on the host's locale.

Much more support is expected in future versions of JavaScript.

2.11 I have a question that is not answered in here or in any of the resources mentioned here but I'm sure it has been answered in clj. Where are the clj archives located?

http://groups.google.com/group/comp.lang.javascript/topics Maintain an archive of comp.lang.javascript going back to 1996 and provide diverse archive searching facilities.

2.12 What does the future hold for ECMAScript?

The ECMAScript Technical Committee is now working on the fourth edition, the first implementation of which is JScript.NET. It includes a compiler, allowing you to create standalone JScript executables.

The fourth edition of ECMAScript will provide new features like typed variables, and classes. More information can be found at: http://www.mozilla.org/js/language/es4/index.html , or from microsoft.public.dotnet.languages.jscript

3 javascript resources

3.1 What books cover javascript?

The only book currently endorsed by c.l.j. regulars is:

JavaScript: The Definitive Guide, 5th Edition By David Flanagan ISBN:0-596-10199-6

The errata should be considered a must read along with the book.

http://www.oreilly.com/catalog/jscript5/
Errata:
http://www.oreilly.com/catalog/jscript5/errata/

3.2 What online resources are available?

The official ECMAScript specification:-
http://www.ecma-international.org/publications/standards/Ecma-262.htm
Other versions of the ECMAScript specification:-
http://www.mozilla.org/js/language/
DOM level 1 ECMA script binding:-
http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html
DOM level 2 ECMA script binding:-
http://www.w3.org/TR/DOM-Level-2-HTML/ecma-script-binding.html
Mozilla JavaScript 1.5 reference:-
http://developer.mozilla.org/en/docs/JavaScript
Online Gecko DOM Reference:-
http://developer.mozilla.org/en/docs/Gecko_DOM_Reference
Download:-
http://www.mozilla.org/docs/dom/domref.zip
Microsoft (D)HTML reference:-
http://msdn.microsoft.com/workshop/author/dhtml/reference/dhtml_reference_entry.asp
JScript reference and main Microsoft script site:-
http://msdn.microsoft.com/library/en-us/script56/html/1e9b3876-3d38-4fd8-8596-1bbfe2330aa9.asp
http://msdn.microsoft.com/scripting/
Opera Documentation:-
http://www.opera.com/docs/specs/#ecmascript
http://www.opera.com/docs/specs/js/
ICab's Inscript documentation:-
http://www.muchsoft.com/inscript/
Frequently asked questions about source code obfuscation:-
http://jibbering.com/faq/obfuscate.html
Microsoft Script Debugger Documentation:
http://msdn.microsoft.com/library/en-us/sdbug/Html/sdbug_1.asp
Venkman - Mozilla Visual JS debugger:-
http://www.mozilla.org/projects/venkman/
Index of Netscape 4 JavaScript docs online (These documents are no longer available form Netscape but are still reproduced by Sun Microsystems, Inc.):-
http://docs.sun.com/source/816-6408-10/
Index of Archived Netscape 4 JavaScript docs online and for download:-
http://devedge-temp.mozilla.org/library/manuals/2000/javascript/1.3/reference/
Archived documentation for MSIE 3.x:-
http://members.tripod.com/~housten/download/
Javascript FAQ site:-
http://javascript.faqts.com/
FESI - a free implementation of ECMAScript in Java:-
http://www.lugrin.ch/fesi/index.html
Sites discussing Active Server Pages:-
http://www.15seconds.com/
http://www.4guysfromrolla.com/
http://www.aspfaq.com/
DHTML source code and tutorials:-
http://www.w3schools.com/
Sites focused on using Scripting to automate Windows:-
http://www.windows-script.com/
http://cwashington.netreach.net/
Microsoft's Windows Scripting Host (WSH) Newsgroup:-
microsoft.public.scripting.wsh
Microsoft's JScript Newsgroup:-
microsoft.public.scripting.jscript
Manipulating times, dates and the lastModified date and time in javascript:-
404'ed http://www.merlyn.demon.co.uk/js-dates.htm
Whitebeam Apache Module - Server Side Javascript in Apache;-
http://www.whitebeam.org/
Digital Mars DMD Script, console and MS Active Script implementation of ECMAScript, claimed to be faster than other implementations:-
http://www.digitalmars.com/dscript/

4 Quick Answers

4.1 How do I protect my javascript code?

With clientside Javascript you can't as your code is distributed in source form and is easily readable. With JScript, there is the Script Encoder (see MSDN), but this is nothing more than obfuscation. Disabling the right mouse button also does nothing to protect your script in a Web browser.

Your code is likely protected under copyright laws. See:
http://www.wipo.int/about-ip/en/copyright.html
http://webdesign.about.com/msubcopyright.htm

4.2 How can I disable the back button in a web browser?

You can't. The browser's history cannot be modified. However, you can use location.replace(url); in some browsers to replace the current page in the history.

http://msdn.microsoft.com/workshop/author/dhtml/reference/methods/replace.asp
http://docs.sun.com/source/816-6408-10/location.htm#1194240

4.3 How can I access the client-side filesystem?

Security means that by default you can't. In a more restricted environment, there are options. For example, using LiveConnect to connect to Java with Netscape, and using the FileSystemObject in IE. Check http://groups-beta.google.com/group/comp.lang.javascript/topics for previous posts on the subject.

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/af4423b2-4ee8-41d6-a704-49926cd4d2e8.asp
http://www.javaworld.com/javaworld/jw-10-1998/jw-10-apptowin32.html

4.4 How can I see in javascript if a web browser accepts cookies?

Writing a cookie, reading it back and checking if it's the same.

http://www.w3schools.com/js/js_cookies.asp
Additional Notes:
http://www.jibbering.com/faq/faq_notes/cookies.html
http://www.ietf.org/rfc/rfc2965.txt
http://www.galasoft-lb.ch/myjavascript/consulting/2001012701/
http://www.cookiecentral.com/

4.5 How can I prevent access to a web page by using javascript?

In practice you can't. While you could create a suitable encryption system with a password in the page, the level of support you need to do this means it's always simpler to do it server-side. Anything that "protects" a page other than the current one is definitely flawed.

4.6 How do I convert a Number into a String with exactly 2 decimal places?

When formatting money for example, to format 6.57634 to 6.58, 6.5 to 6.50, and 6 to 6.00?

Rounding of x.xx5 is uncertain, as such numbers are not represented exactly. See section 4.7 for Rounding issues.

N = Math.round(N*100)/100 only converts N to a Number of value close to a multiple of 0.01; but document.write(N) does not give trailing zeroes.

ECMAScript Ed. 3.0 (JScript 5.5 [but buggy] and JavaScript 1.5) introduced N.toFixed, the main problem with this is the bugs in JScripts implementation.

Most implementations fail with certain numbers, for example 0.07. The following works successfully for M>0, N>0:

function Stretch(Q, L, c) { var S = Q
 if (c.length>0) while (S.length<L) { S = c+S }
 return S
}
function StrU(X, M, N) { // X>=0.0
 var T, S=new String(Math.round(X*Number("1e"+N)))
 if (S.search && S.search(/\D/)!=-1) { return ''+X }
 with (new String(Stretch(S, M+N, '0')))
 return substring(0, T=(length-N)) + '.' + substring(T)
}
function Sign(X) { return X>0 ? "+" : X<0 ? "-" : " " }
function StrS(X, M, N) { return Sign(X)+StrU(Math.abs(X), M, N) }
Number.prototype.toFixed= function(n){ return StrS(this,1,n)};
http://www.merlyn.demon.co.uk/js-round.htm
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/b5f03400-865e-4ab2-818c-f734c0f6d6f0.asp

4.7 Why does simple decimal arithmetic give strange results?

For example, 5*1.015 does not give exactly 5.075 and 0.06+0.01 does not give exactly 0.07 in javascript.

Javascript numbers are represented in binary as IEEE-754 (IEC 559) Doubles, with a resolution of 53 bits, giving an accuracy of 15-16 decimal digits; integers up to about 9e15 are precise, but few decimal fractions are. Given this, arithmetic is as exact as possible, but no more. Operations on integers are exact if the true result and all intermediates are integers within that range.

In particular, non-integer results should not normally be compared for equality; and non-integer computed results commonly need rounding; see 4.6.

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/c7a6bd3a-4b1c-4dbe-8505-106dbf483b41.asp

Otherwise, use Math.round on the results of expressions which should be of integer value.

4.8 How do I communicate between frames in a web browser?

To reference another frame, you simply need to step through the frame hierarchy: parent is the page the frame is defined in, parent.framename is another frame in the same frameset. To access a variable called Moomin in a frame called Snork you would use parent.Snork.Moomin . To call the function Snufkin in that frame you would use parent.Snork.Snufkin() .

4.9 How do I find the size of the window/browser canvas area?

While it is often asked about window size, what is more relevant is the "canvas area" of the browser.

Where supported in NN: (>NN4.0)

var winWidth = window.innerWidth;
var winHeight = window.innerHeight;

Where supported in IE: (>IE4.0)

var winWidth = document.body.clientWidth;
var winHeight = document.body.clientHeight;

Where supported in modern browsers:

var winWidth = document.documentElement.clientWidth
var winHeight = document.documentElement.clientHeight

Where supported in DOM compliant browsers:

var winWidth, winHeight, d=document;
if (typeof window.innerWidth!='undefined') {
 winWidth = window.innerWidth;
 winHeight = window.innerHeight;
} else {
 if (d.documentElement && 
  typeof d.documentElement.clientWidth!='undefined' && 
   d.documentElement.clientWidth!=0) {
  winWidth = d.documentElement.clientWidth
  winHeight = d.documentElement.clientHeight
 } else {
  if (d.body && 
   typeof d.body.clientWidth!='undefined') {
   winWidth = d.body.clientWidth
   winHeight = d.body.clientHeight
  }
 }
}

Note: The dimensions can not be determined accurately until after the document has finished loading.

http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/clientWidth.asp
http://docs.sun.com/source/816-6408-10/window.htm#1202446
http://msdn.microsoft.com/workshop/author/om/measuring.asp

4.10 How do I check to see if a childwindow is open, before opening another?

var myWin=null;
function openWin(aURL) {
 if (!myWin || myWin.closed ) {
  myWin=window.open(aURL,'myWin');
 } else{
  myWin.location=aURL;
  myWin.focus();
 }
}
http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/closed.asp
http://docs.sun.com/source/816-6408-10/window.htm#1201877

4.11 Why does framename.print() not print the correct frame in IE?

IE prints the frame that has focus when you call the print method frameref.focus();frameref.print();

http://msdn.microsoft.com/library/en-us/dnscrpt/html/dhtmlprint.asp

4.12 Why does K = parseInt('09') set K to 0?

The parseInt function decides what base to convert a number represented as a string to by looking at the string. It assumes that any string beginning with '0x' or '0X' represents a hexadecimal number, but it has a choice with a leading zero: the string could represent a number that can be either octal or decimal. Assuming octal, the string '09' will be converted to 0 (octal digits are 0-7); assuming decimal, '09' will be converted to 9 (the leading zero is ignored). To force use of a particular base, use the radix parameter: parseInt("09",base)

http://msdn.microsoft.com/library/en-us/script56/html/js56jsmthparseint.asp
http://docs.sun.com/source/816-6408-10/toplev.htm#1064173
http://www.jibbering.com/faq/faq_notes/faq_notes.html#FAQN4_12

4.13 How do I get the value of a form control?

In HTML documents, named forms may be referred to as named properties of the document.forms collection, and named form controls may be referred to as named properties of the form's elements collection:

var frm = document.forms["formname"];
var contrl = frm.elements["elementname"];

The (string) value property of such controls can be read directly from the element:-

var value = contrl.value;
var value = (+contrl.value); //string to number: see 4.21

Some exceptions would be:

First Exception: Where the control is a SELECT element, and support for older browsers, such as NN4, is required:

var value = contrl.options[contrl.selectedIndex].value;

Second Exception: Where several controls share the same name, such as radio buttons. These are made available as collections and require additional handling. For more information, see:-

http://www.jibbering.com/faq/faq_notes/form_access.html

Third Exception: File Inputs where most current browsers do not allow the reading of type="file" input elements in a way that is useful.

4.14 How do I close a window and why does it not work on the first one?

Use windowRef.close() , where windowRef is a window object reference, such as window, top, parent, self, or a reference obtained from the window.open() method. You can only close windows opened by scripts, no others.

http://msdn.microsoft.com/workshop/author/dhtml/reference/methods/close_0.asp
http://docs.sun.com/source/816-6408-10/window.htm#1201822
http://developer.mozilla.org/en/docs/DOM:window.open#FAQ

4.15 How do I modify the current page in a browser?

Using the DOM the non-standard but widely implemented innerHTML extension, the following would be sufficient to modify the content of any element that can have content: <div id="anID">Some Content</div> with script of document.getElementById("anID").innerHTML= "Some <em>new</em> Content"; Where "anID" is the (unique on the HTML page) ID attribute value of the element to modify.

The script below adds support for document.all capable browsers. Support for NN4 is also possible, but certain issues mean that it is not listed here. Using the example above, the call would be written: DynWrite('anID',"Some <em>new</em> Content") With the below code also in the page:

DocDom = (document.getElementById?true:false);
DocAll = (document.all?true:false);
DocStr=''
if (DocAll) DocStr="return document.all[id]"
if (DocDom) DocStr="return document.getElementById(id)"
GetRef=new Function("id", DocStr)
if (DocStr=='') { DynWrite=new Function("return false") } else {
  DynWrite=new Function("id", "S", "GetRef(id).innerHTML=S; return true")
}
An alternative DynWrite function:
http://www.jibbering.com/faq/faq_notes/alt_dynwrite.html
http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/innerHTML.asp
http://www.mozilla.org/docs/dom/domref/dom_el_ref8.html#1018427

4.16 How do I trim whitespace - LTRIM/RTRIM/TRIM?

Using Regular Expressions (JavaScript 1.2/JScript 3+) :

String.prototype.lTrim =
     function()
      {
       return this.replace(/^\s+/,'');
      }
String.prototype.rTrim =
     function()
      {
       return this.replace(/\s+$/,'');
      }
String.prototype.trim =
     function()
      {
       return this.replace(/^\s+|\s+$/g,'');
      } 

or for all versions (trims characters ASCII<32 not true "whitespace"):

function LTrim(str) { 
 for (var k=0; k<str.length && str.charAt(k)<=" " ; k++) ;
 return str.substring(k,str.length);
}
function RTrim(str) {
 for (var j=str.length-1; j>=0 && str.charAt(j)<=" " ; j--) ;
 return str.substring(0,j+1);
}
function Trim(str) {
 return LTrim(RTrim(str));
}
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/2380d458-3366-402b-996c-9363906a7353.asp
http://docs.sun.com/source/816-6408-10/regexp.htm

4.17 How do I force a reload from the server/prevent caching?

To reload a page, use location.reload(). However, this depends upon the cache headers that your server sends. To change this, you need to alter the server configuration. A quick fix on the client is to change the page URI so that it contains a unique element, such as the current time. For example: location.replace(location.href+'?d='+new Date().valueOf()) If the location.href already contains a Query String, use: location.replace(location.href+'&d='+new Date().valueOf())

http://www.mnot.net/cache_docs/
http://docs.sun.com/source/816-6408-10/date.htm

4.18 How do I get a perl/asp/php variable into client-side js?

Use the server-side language to generate the javascript:

var jsvar="<%= aspvar %>";
var jsvar="<?php echo $phpvar ?>";

4.19 Why do I get permission denied when accessing a frame/window?

In the normal browser security model, it is impossible for a script from one domain to access the properties of pages served from another domain, or a different protocol. Any attempt to access a property in such cases will result in a "Permission Denied" error. Signed scripts or trusted ActiveX objects can overcome this in limited situations.

http://msdn.microsoft.com/workshop/author/om/xframe_scripting_security.asp

4.20 How do I make a 10 second delay?

There is no built-in way to pause execution in javascript such as a sleep function, but hosts usually provide a method of some form. Web browsers are designed for event driven programming and only provide the setTimeout and setInterval functions to facilitate timed delays. The delay before calling Snork may exceed the second parameter to setTimeout and setInterval due to implementation differences among browsers.

To call the function Snork() , approx 10 seconds after the function Moomin() , you would do this:

Moomin()
setTimeout('Snork()',10000)

Script execution is not stopped, and adding Snufkin() after the setTimeout line would immediately execute the function Snufkin() before Snork()

Achieving delays through running a loop of some sort for a pre-defined period is a bad strategy, as that will tend to put CPU use up to 100% and inhibit whatever was supposed to be happening during the delay.

Other (less event driven) hosts have different wait functions, such as WScript.Sleep() in the Windows Script Host.

http://msdn.microsoft.com/workshop/author/dhtml/reference/methods/setTimeout.asp
http://docs.sun.com/source/816-6408-10/window.htm#1203758
http://en.wikipedia.org/wiki/Event-driven_programming

4.21 Why does 1+1 equal 11? or How do I convert a string to a number?

Javascript variables are loosely typed: the conversion between a string and a number happens automatically. Since plus (+) is also used as in string concatenation, '1' + 1 is equal to '11' : the String deciding what + does. To overcome this, first convert the string to a number. For example: +varname or Number(varname) or parseInt(varname, 10) or parseFloat(varname) . Prompt and form control values are strings, as is the result from a prompt window. Convert these to numbers before performing addition.

Additional Notes:
http://www.jibbering.com/faq/faq_notes/type_convert.html
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/12a450e5-4818-4a09-9878-cd7c6cd2a248.asp

4.22 How do I generate a random integer from 1 to N?

Method Math.random() returns a value R such that 0 <= R < 1.0 ; therefore

function Random(x) { return Math.floor(x*Math.random()) }

gives an evenly distributed random integer in the range from 0 to x-1 inclusive; use Random(N)+1 for 1 to N.

http://msdn2.microsoft.com/en-us/library/41336409.aspx
http://docs.sun.com/source/816-6408-10/math.htm
How to Deal and Shuffle, see in:
http://www.merlyn.demon.co.uk/js-randm.htm

4.23 How do I change print settings with window.print()?

In a normal security environment, you can't change anything. The page stylesheet rules provide some options, but are not supported in browsers yet. If you can, use an ActiveX or Plugin ScriptX and Neptune from Meadroid to give you more control for Windows versions of Internet Explorer and Netscape 4,6 and Opera 5.

http://www.meadroid.com/scriptx/
http://msdn.microsoft.com/library/en-us/dnscrpt/html/dhtmlprint.asp

4.24 I have <a href="javascript:somefunction()"> what ... ?

Whatever the rest of your question, this is generally a very bad use of the javascript pseudo protocol. It was designed so that a function could return a new page. For example: javascript:"<p>Hello</p>" . Using it simply to call a function when a link is clicked causes an error in user agents that do not support javascript, or have javascript disabled. Instead, use <a href="something.html" onclick="somefunction();return false"> where something.html is a meaningful alternative. Alternatively, place the onclick event on another element so that users without JavaScript aren't even aware that it does anything.

http://www.useit.com/alertbox/20021223.html

4.25 My element is named myselect[] , how do I access it?

Form controls with any "illegal" characters can be accessed with formref.elements["myselect[]"] - The bracket characters, amongst others, are illegal in ID attributes and JavaScript identifiers, so you should try to avoid them as browsers may handle them incorrectly.

http://msdn.microsoft.com/workshop/author/dhtml/reference/collections/elements.asp
http://docs.sun.com/source/816-6408-10/form.htm
http://www.jibbering.com/faq/faq_notes/faq_notes.html#FAQN4_25

4.26 How do I detect Opera/Netscape/IE?

The navigator object contains strings which specify the browser and version; however, this is in general not very genuine. Mozilla (and therefore Netscape 6+) allows this to be freely set, and Opera and IE allow it to be modified. There are also at least 25 other javascript capable browsers with their own strings here.

Generally though, you don't need to identify which browser is being used. There are alternative techniques, but which one you choose depends on why you want to redirect browsers. If it's to offer different CSS stylesheets, then http://w3development.de/css/hide_css_from_browsers/ shows many techniques. For Scripting, object detection is a better method to use. http://www.quirksmode.org/js/support.html It is also known as feature detection.

Object/feature detection means checking that the object you wish to use is supported by the browser before using it. This means that you don't need to know what browsers support what methods, and your code will automatically be usable on any browser that can execute it.

if (document.getElementById &&
  document.getElementById('el') &&
    document.getElementById('el').style ) {
  // We know that this browser supports getElementByID and has
  // a style object, so we can set a style property.
  document.getElementById('el').style.color="red";
}

Browser bugs can often be detected and overcome in similar ways.

http://developer.mozilla.org/en/docs/Using_Web_Standards_in_your_Web_Pages#Developing_Cross_Browser.2FCross_Platform_Pages
http://www.jibbering.com/faq/faq_notes/not_browser_detect.html
http://developer.apple.com/internet/webcontent/objectdetection.html

4.27 How do I disable the right mouse button?

The oncontextmenu intrinsic event is the only safe and reliable method. Of the other approaches often presented, most depend on an alert box interrupting the process and rarely work. Note that oncontextmenu is a non-standard event and is not supported on all browsers. <body oncontextmenu="return false">

4.28 How do I change the confirm box to say yes/no or default to cancel?

The buttons on a confirm box cannot be changed, nor can you specify a default button. However, you should be able to change the question so that "OK" is suitable as the default. e.g. change "We will now buy ourselves a Porsche with your credit card, Do you want to continue with this transaction OK Cancel" to "We will now buy ourselves a Porsche with your credit card, Would you like to abandon this transaction? OK Cancel"

4.29 How do I log-out a user when they leave my site?

This cannot be done reliably. Here's why:

The URL below has more information.

http://groups.google.com/groups?selm=BlmZ7.55691%244x4.7344316%40news2-win.server.ntlworld.com

4.30 How do I format the Last-Modified date with javascript?

Apparently, new Date() reads it correctly, though problems can occur if the browser returns only two digits for the year. In particular, time zone, field order and separators may vary. It is also reliant on the server's clock having been correctly set at the time of upload. See the URL below.

http://www.merlyn.demon.co.uk/js-date2.htm#lM

4.31 Why are my rollovers so slow?

Images are cached by the browser depending on the headers sent by the server. If the server does not send sufficient information for the browser to decide the image is cacheable, the browser will check if the image has been updated every time you change the src of an image (in some user settings). To overcome this you must send suitable headers.

http://www.mnot.net/cache_docs/

4.32 How do I change the text in the url/location bar?

This text can only be altered by changing the URL of the page. The normal solution is to use frames, though this can introduce problems of its own.

4.33 How do I prompt a "Save As" dialog for an accepted mime type?

It is not possible with client-side JavaScript.

Some browsers accept the Content-Disposition header, but this must be added by the server. Taking the form:- Content-Disposition: attachment; filename=filename.ext

http://aspfaq.com/show.asp?id=2161
http://support.microsoft.com/support/kb/articles/Q260/5/19.ASP

4.34 How do I run a server side script?

You trigger a server-side script by setting any object's URL. For example a frame, window, or an Image. An image will also "swallow" the data sent back by the server, so that they will not be visible anywhere.

var dummyImage = new Image();dummyImage.src = "scriptURL.asp?param=" + varName;
      

Mozilla (NN6.2+, Firefox, Ice Weasle etc), Opera 7.6+, Safari1.2+, the Windows version of IE versions 5+, and some other browsers provide the XML HTTP Request object. This allows JavaScript to send HTTP requests directly to the server, and interact with the responses returned.

http://jibbering.com/2002/4/httprequest.html

4.35 I have window.status="Moomin"; why doesn't the statusbar change?

When changing the status in an event (e.g. onmouseover) you should return true from the event. Also a number of browsers require a short delay before setting the status to overcome their default behaviour with the statusbar. onevent="setTimeout('window.status=\'Moomin\'',15);" Most browsers are configured, by default, to disallow scripts from setting the status bar text.

4.36 How do I modify the current browser window?

In a default security environment you are very limited in how much you can modify the current browser window. You can use window.resizeTo or window.moveTo to resize or move a window respectively, but that is it. Normally you can only suggest chrome changes in a window.open

http://msdn.microsoft.com/workshop/author/dhtml/reference/methods/open_0.asp
http://developer.mozilla.org/en/docs/DOM:window.open

4.37 How do I POST a form to a new window?

You use the target attribute on the form, opening a window with that name and your feature string in the onsubmit handler of the FORM.

<form ... target="wndname" onsubmit="window.open('',this.target,'features');return true;">
http://www.htmlhelp.com/reference/html40/forms/form.html

4.38 How do I download a page to a variable?

Within a web-page, you need to either use java, or the XML HTTP Request object, see:

http://jibbering.com/2002/4/httprequest.html
http://www.ajaxtoolbox.com/

4.39 How do I access a property of an object using a string?

There are two ways to access properties: the dot notation and the square bracket notation. What you are looking for is the square bracket notation in which the dot, and the identifier to its right, are replaced with a set of square brackets containing a string. The value of the string matches the identifier. For example:-

//dot notation
var bodyElement = document.body;
 //square bracket notation, using an expression
var bodyElement = document["bo"+"dy"];
http://www.jibbering.com/faq/faq_notes/square_brackets.html

4.40 When should I use eval?

The eval() function should only be used when it is necessary to evaluate a string supplied or composed at run-time; the string can be anything from a simple (but unpredictable) expression such as 12*2.54 to a substantial piece of javascript code.

4.41 Why doesn't the global variable "divId" always refer to the element with id="divId"?

Microsoft introduced a shortcut that can be used to reference elements which include an ID attribute where the ID becomes a global variable. Some browsers reproduce this behaviours but some, most notably Gecko-based browsers (Netscape and Mozilla), do not. The best approach is the document.getElementById method, which is part of the W3C DOM standard and implemented in modern browsers (including IE from version 5.0). So an element with id="foo" can be referenced with:-

var el = document.getElementById("foo");
http://developer.mozilla.org/en/docs/Using_Web_Standards_in_your_Web_Pages#Accessing_Elements_with_the_W3C_DOM
http://www.jibbering.com/faq/faq_notes/faq_notes.html#FAQN4_41

4.42 How do I open a new window with javascript?

New windows can be opened on browsers that support the window.open function and are not subject to the action of any pop-up blocking mechanism with code such as:-

if(window.open){
 wRef = window.open("http://example.com/page.html","windowName");
}
http://developer.mozilla.org/en/docs/DOM:window.open
http://www.infimum.dk/HTML/JSwindows.html

4.43 How do I get my browser to report javascript errors?

Various browsers include mechanisms for reporting javascript errors in more or less detail but often they need to be enabled or actively viewed. The quick way of activating error messages in the Windows version of IE is to wait until a little yellow triangle appears at the left end of the status bar, double click on it and, when the error dialog box appears, check the "Always show errors" checkbox it contains. It is also possible to enable/disable error reporting from the "Internet Options" dialog available through the menus. Mac IE error reporting is enabled through the preferences dialog.

Netscape, Mozilla and other Gecko-based browsers have a javascript console that displays errors. It can be viewed by typing javascript: into the address bar, and it is sometimes also available as a menu item.

There is also a Firebug extension for Mozilla based browsers: http://www.getfirebug.com/

Opera's JavaScript console can be opened from the Tools menu (Tools > Advanced > JavaScript console). Alternatively, you can have it open automatically by selecting the "Open JavaScript console on error" checkbox in the Javascript preferences Section. Unreviewed is a developer Console for Opera: http://dev.opera.com/articles/view/opera-developer-tools/?page=2

For Safari see:
http://developer.apple.com/internet/safari/faq.html#anchor14

4.44 What is AJAX?

AJAX is shorthand for Asynchronous Javascript And XML. The technology is based on the XMLHttpRequest Object. It is also known as "Web 2.0". At its simplest, it is the sending/retrieving of new data from the server without changing URL's or reloading the current page.

Mozilla Documentation:
http://developer.mozilla.org/en/docs/XMLHttpRequest
MSDN Documention:
http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/objects/obj_xmlhttprequest.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/html/63409298-0516-437d-b5af-68368157eae3.asp
AJAX Libraries and Tutorial Sites:
http://jibbering.com/2002/4/httprequest.html
http://www.ajaxtoolbox.com/

An alternative to the XMLHttpRequest Object is Remote Scripting:

http://www.ashleyit.com/rs/main.htm

5 Comments and Suggestions

5.1 Why do some posts have <FAQENTRY> in them ?

If a poster feels that the question they are answering should be covered in the FAQ, placing <FAQENTRY> in your post lets the FAQ robot collect the messages for easy review and inclusion. A Draft Proposal for the FAQ is requested and appreciated.

The <FAQENTRY> should not be used in posts except in conjunction with a suggestion/proposal for the FAQ. It should also not be literally quoted in replies, instead it should be partly obscured as, e.g. <FAQ**TRY> or similar.

5.2 How do I make a suggestion?

To make a suggestion to the FAQ, use either the FAQENTRY method above, or email Randy Webb (cljfaq@comcast.net) (current FAQ editor) or Jim Ley (jim@jibbering.com). All comments, suggestions, and especially corrections are welcome. Any email sent to cljfaq@comcast.net that does not contain FAQENTRY in the subject line is summarily deleted by my spam filter.

The FAQ uses the stylesheet faq.css and is generated from the xml source index.xml by the windows script host script process.wsf which also checks the links.