Kor: When you have a single radio button, the classical reference return, logically, a single element, not a collection. A single element has no length property. For instance, give a textbox a name, than try to find its length property. You will get undefined, logically. Same with a single radio button.
DOM method getElementsByName() returns always a collection, thus this is the reason for DOM method works, classical form’s elements reference don’t.
once again: getElementsByName() returns always a collection, thus it has always a length property, very much alike an array. Now if you have a single element with a certain name refered by getElementsByName() it is the same as you would have an array with a single element.
This is the reason for you need always an index when using getElementsByName() to refer a certain element.
Classical reference
document.formname.elementname
is ambiguous. It returns a collection if there are more than one element, but it returns the element itself when there is no other element with the same name.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html lang="en"> <head> <title>Radion Test</title> <script language="javascript" type="text/javascript"> function radio_test(){ var str= "1. document.forms['dummy'].elements['single'].length=\n\t"+ document.forms.dummy.elements.single.length+ "\n\n2. document.forms['dummy'].elements['single'].type=\n\t"+ document.forms.dummy.elements.single.type+ "\n\n3. document.getElementsByName('single').length=\n\t"+ document.getElementsByName('single').length+ "\n\n4. document.getElementsByName('single')[0].type=\n\t"+ document.getElementsByName('single')[0].type; alert(str); return false; } onload=function(){ document.getElementsByName('submit')[0].onclick=radio_test; } </script> </head> <body> <form name="dummy" action="" onsubmit= "return false"> <fieldset><input type="radio" name="single" > <input type="submit" value="submit" name="submit"> </fieldset> </form> </body> </html>
—
Quoted: http://www.webdeveloper.com/forum/showthread.php?t=184376