--- 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.