Closed Bug 41826 Opened 26 years ago Closed 26 years ago

JavaScript getElementById does not create array for Radio buttons with same name

Categories

(Core :: DOM: Core & HTML, defect, P3)

x86
Windows NT
defect

Tracking

()

VERIFIED WONTFIX

People

(Reporter: tpowellmoz, Assigned: jst)

Details

From Bugzilla Helper: User-Agent: Mozilla/5.0 (Windows; U; WinNT4.0; en-US; m16) Gecko/20000606 BuildID: 2000060608 Trying to use document.getElementById as a replacement for IE's document.all. I want to reference a radio button set and check its length and determine which one is checked. getElementByID only gives a reference to a particular element and not the collection. Reproducible: Always Here's simplified sample code that demonstrates the problem. <form name="frm"> <label> <input type="Radio" name="rad" value="0" checked="checked"> Button 0 </label><br> <label> <input type="Radio" name="rad" value="1"> Button 1 </label><br> </form> <script language="JavaScript"> alert("Radio array length using explicit reference: " + document.frm.rad.length + " (should be 2)"); alert("Radio array length from getElementById: " + document.getElementById ('rad').length + " (should be 2)"); // The following comment is what you'd use for IE with document.all // alert("Radio array length from document.all: " + document.all['rad'].length + " (should be 2)"); </script> This is somewhat like the problem described in bug 18840 except instead of referencing by document.form[0] explicitly I'm using document.getElementById. The DOM 1 HTML spec says that behavior is undefined when multiple elements have the same ID (in this case form elements with the same name). It would seem logical to collect them together into an array. getElementById works like Mozilla in IE5, but document.all creates the array of radio elements. It'd be nice if Mozilla could use getElementById as a replacement for document.all. (Or implement document.all)
The DOM clearly defines that getElementById returns an element whose *ID* matches the argument given to getElementById, and the method name also implies that the method does indeed return only one *element* (and so does the return type). ID's are document unique identifiers and thus you can not have more than one element with the same ID, NAME attributes are not ID's and getElementById should not even find elements whose NAME happens to match the given argument (in mozilla it does, but IMO it shouldn't). It sounds like you should be using the getElementsByName() method and not getElementById(). I'm marking this as WONTFIX since we'd be breaking the DOM spec and there's no backwards compatibility to consider here...
Status: UNCONFIRMED → RESOLVED
Closed: 26 years ago
Resolution: --- → WONTFIX
No failure found in getElementById(). IDs must be unique in a document according to HTML 4.0 spec at: http://www.w3.org/TR/REC-html40/struct/global.html#adef-id Marking Verified.
Status: RESOLVED → VERIFIED
Component: DOM → DOM: Core & HTML
You need to log in before you can comment on or make changes to this bug.