--- title: HTMLSelectElement slug: Web/API/HTMLSelectElement tags: - API - HTML DOM - Interface - NeedsTranslation - Reference - TopicStub translation_of: Web/API/HTMLSelectElement ---
The HTMLSelectElement interface represents a {{HTMLElement("select")}} HTML Element. These elements also share all of the properties and methods of other HTML elements via the {{domxref("HTMLElement")}} interface.
{{InheritanceDiagram(600, 120)}}
This interface inherits the properties of {{domxref("HTMLElement")}}, and of {{domxref("Element")}} and {{domxref("Node")}}.
null.unsigned long The number of {{HTMLElement("option")}} elements in this select element.long reflecting the index of the first selected {{HTMLElement("option")}} element. The value -1 indicates no element is selected.long reflecting the {{htmlattrxref("size", "select")}} HTML attribute, which contains the number of visible items in the control. The default is 1, unless multiple is true, in which case it is 4.multiple is true, it returns "select-multiple"; otherwise, it returns "select-one".willValidate is false), or it satisfies its constraints.This interface inherits the methods of {{domxref("HTMLElement")}}, and of {{domxref("Element")}} and {{domxref("Node")}}.
option elements for this select element.false).id or the name attribute of an option node. You can also access an item by specifying the name in array-style brackets or parentheses, without calling this method explicitly./* assuming we have the following HTML
<select id='s'>
<option>First</option>
<option selected>Second</option>
<option>Third</option>
</select>
*/
var select = document.getElementById('s');
// return the index of the selected option
console.log(select.selectedIndex); // 1
// return the value of the selected option
console.log(select.options[select.selectedIndex].value) // Second
A better way to track changes to the user's selection is to watch for the {{event("change")}} event to occur on the <select>. This will tell you when the value changes, and you can then update anything you need to. See the example provided in the documentation for the change event for details.
| Specification | Status | Comment |
|---|---|---|
| {{SpecName('HTML WHATWG', '#htmlselectelement', 'HTMLSelectElement')}} | {{Spec2('HTML WHATWG')}} | Since the latest snapshot, {{SpecName('HTML5 W3C')}}, it adds the autocomplete property and the reportValidity() method. |
| {{SpecName('HTML5 W3C', 'forms.html#htmlselectelement', 'HTMLSelectElement')}} | {{Spec2('HTML5 W3C')}} | Is a snapshot of {{SpecName("HTML WHATWG")}}. It adds the autofocus, form, required, labels, selectedOptions, willValidate, validity and validationMessage properties.The tabindex property and the blur() and focus() methods have been moved to {{domxref("HTMLElement")}}.The methods item(), namedItem(), checkValidity() and setCustomValidity(). |
| {{SpecName('DOM2 HTML', 'html.html#ID-94282980', 'HTMLSelectElement')}} | {{Spec2('DOM2 HTML')}} | options now returns an {{domxref("HTMLOptionsCollection")}}.length now returns an unsigned long. |
| {{SpecName('DOM1', 'level-one-html.html#ID-94282980', 'HTMLSelectElement')}} | {{Spec2('DOM1')}} | Initial definition |
| Feature | Chrome | Edge | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit) |
|---|---|---|---|---|---|---|
| Basic support | 1.0 | {{CompatVersionUnknown}} | {{CompatGeckoDesktop(1.0)}} [2] | 1.0 | 1.0 | 1.0 |
item() and namedItem() |
{{CompatVersionUnknown}} | {{CompatVersionUnknown}}[3] | {{CompatGeckoDesktop(2.0)}} | 8[3] | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} |
setCustomValidity(), checkValidity(), willValidate, validationMessage, validity |
{{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatGeckoDesktop(2.0)}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatUnknown}} |
selectedOptions |
{{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatGeckoDesktop(26)}} | {{CompatNo}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} |
labels |
{{CompatVersionUnknown}} | {{CompatNo}} | {{CompatGeckoDesktop(56)}}[1] | {{CompatNo}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} |
| Feature | Android | Chrome | Edge | Firefox Mobile (Gecko) | Firefox OS | IE Phone | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|---|---|---|
| Basic support | 1.0 | 1.0 | {{CompatVersionUnknown}} | {{CompatGeckoMobile(1)}} | 1.0 | 1.0 | 1.0 | 1.0 |
item() and namedItem() |
{{CompatUnknown}} | {{CompatUnknown}} | {{CompatVersionUnknown}} | {{CompatGeckoMobile(2.0)}} | 1.0 | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatVersionUnknown}} |
setCustomValidity(), checkValidity(), willValidate, validationMessage, validity |
{{CompatUnknown}} | {{CompatUnknown}} | {{CompatVersionUnknown}} | {{CompatGeckoMobile(2.0)}} | 1.0 | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} |
selectedOptions |
{{CompatUnknown}} | {{CompatUnknown}} | {{CompatVersionUnknown}} | {{CompatGeckoMobile(26)}} | 1.2 | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatVersionUnknown}} |
labels |
{{CompatUnknown}} | {{CompatUnknown}} | {{CompatNo}} | {{CompatGeckoMobile(56)}}[1] | {{CompatNo}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatVersionUnknown}} |
[1] Implemented in {{bug("556743")}}.
[2] Historically, Firefox has allowed keyboard and mouse events to bubble up from the <option> element to the parent {{HTMLElement("select")}} element. This doesn't happen in Chrome, however, although this behavior is inconsistent across many browsers. For better Web compatibility (and for technical reasons), when Firefox is in multi-process mode and the <select> element is displayed as a drop-down list. The behavior is unchanged if the <select> is presented inline and it has either the multiple attribute defined or a size attribute set to more than 1. Rather than watching <option> elements for events, you should watch for {event("change")}} events on {{HTMLElement("select")}}. See {{bug(1090602)}} for details.
[3] namedItem does not appear to take the name attribute into account (only the id attribute) on Internet Explorer and Edge. There is a bug report to Microsoft about this.