ion-input
The input component is a wrapper to the HTML input element with custom styling and additional functionality. It accepts most of the same properties as the HTML input, but works great on desktop devices and integrates with the keyboard on mobile devices.
Basic Usage
Types
The input component is meant for text type inputs only, such as "text", "password", "email", "number", "search", "tel", and "url". It supports all standard text input events including keyup, keydown, keypress, and more. The default type is "text".
Label Positioning
Labels will take up the width of their content by default. This positioning can be changed to be a fixed width, stacked, or floating label.
Clear Options
Inputs offer two options for clearing the input based on how you interact with it. The first way is by adding the clearInput property which will show a clear button when the input has a value. The second way is the clearOnEdit property which will clear the input after it has been blurred and then typed in again. Inputs with a type set to "password" will have clearOnEdit enabled by default.
Filled Inputs
Material Design offers filled styles for an input when it is inside of an item. The fill property on the item can be set to either "solid" or "outline".
Helper & Error Text
Helper & error text can be used inside of an item with an input by slotting a note in the "helper" and "error" slots. The error slot will not be displayed unless the ion-invalid class is added to the ion-item. In Angular, this is done automatically through form validation. In JavaScript, React and Vue, the class needs to be manually added based on your own validation.
Item Counter
The item counter is helper text that displays under an input to notify the user of how many characters have been entered out of the total that the input will accept. When adding counter, the default behavior is to format the value that gets displayed as inputLength / maxLength. This behavior can be customized by passing in a formatter function to the counterFormatter property.
Filtering User Input
Developers can use the ionInput event to update the input value in response to user input such as a keypress. This is useful for filtering out invalid or unwanted characters.
When storing the value in a state variable, we recommend updating both the state variable and the ion-input component value. This ensures that the state variable and the ion-input component value remain in sync.
Theming
Colors
CSS Custom Properties
Input uses scoped encapsulation, which means it will automatically scope its CSS by appending each of the styles with an additional class at runtime. Overriding scoped selectors in CSS requires a higher specificity selector. Targeting the ion-input for customization will not work; therefore we recommend adding a class and customizing it that way.
Interfaces
InputChangeEventDetail
interfaceInputChangeEventDetail{
value:string|undefined|null;
}
InputCustomEvent
While not required, this interface can be used in place of the CustomEvent interface for stronger typing with Ionic events emitted from this component.
interfaceInputCustomEventextendsCustomEvent{
detail: InputChangeEventDetail;
target: HTMLIonInputElement;
}
Properties
accept (deprecated)
acceptstring | undefinedundefinedautocapitalize
"off", "none", "on", "sentences", "words", "characters".autocapitalizestring'off'autocomplete
autocomplete"name" | "email" | "tel" | "url" | "on" | "off" | "honorific-prefix" | "given-name" | "additional-name" | "family-name" | "honorific-suffix" | "nickname" | "username" | "new-password" | "current-password" | "one-time-code" | "organization-title" | "organization" | "street-address" | "address-line1" | "address-line2" | "address-line3" | "address-level4" | "address-level3" | "address-level2" | "address-level1" | "country" | "country-name" | "postal-code" | "cc-name" | "cc-given-name" | "cc-additional-name" | "cc-family-name" | "cc-number" | "cc-exp" | "cc-exp-month" | "cc-exp-year" | "cc-csc" | "cc-type" | "transaction-currency" | "transaction-amount" | "language" | "bday" | "bday-day" | "bday-month" | "bday-year" | "sex" | "tel-country-code" | "tel-national" | "tel-area-code" | "tel-local" | "tel-extension" | "impp" | "photo"'off'autocorrect
autocorrect"off" | "on"'off'autofocus
autofocusbooleanfalseclearInput
true, a clear icon will appear in the input when there is a value. Clicking it clears the input.clear-inputbooleanfalseclearOnEdit
true, the value will be cleared after focus upon edit. Defaults to true when type is "password", false for all other types.clear-on-editboolean | undefinedundefinedcolor
"primary", "secondary", "tertiary", "success", "warning", "danger", "light", "medium", and "dark". For more information on colors, see theming.color"danger" | "dark" | "light" | "medium" | "primary" | "secondary" | "success" | "tertiary" | "warning" | string | undefinedundefineddebounce
ionChange event after each keystroke. This also impacts form bindings such as ngModel or v-model.debouncenumber0disabled
true, the user cannot interact with the input.disabledbooleanfalseenterkeyhint
"enter", "done", "go", "next", "previous", "search", and "send".enterkeyhint"done" | "enter" | "go" | "next" | "previous" | "search" | "send" | undefinedundefinedinputmode
"none", "text", "tel", "url", "email", "numeric", "decimal", and "search".inputmode"decimal" | "email" | "none" | "numeric" | "search" | "tel" | "text" | "url" | undefinedundefinedmax
maxnumber | string | undefinedundefinedmaxlength
text, email, search, password, tel, or url, this attribute specifies the maximum number of characters that the user can enter.maxlengthnumber | undefinedundefinedmin
minnumber | string | undefinedundefinedminlength
text, email, search, password, tel, or url, this attribute specifies the minimum number of characters that the user can enter.minlengthnumber | undefinedundefinedmode
mode"ios" | "md"undefinedmultiple
true, the user can enter more than one value. This attribute applies when the type attribute is set to "email", otherwise it is ignored.multipleboolean | undefinedundefinedname
namestringthis.inputIdpattern
"text", "search", "tel", "url", "email", "date", or "password", otherwise it is ignored. When the type attribute is "date", pattern will only be used in browsers that do not support the "date" input type natively. See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/date for more information.patternstring | undefinedundefinedplaceholder
type property is set to "email", "number", "password", "search", "tel", "text", or "url", otherwise it is ignored.placeholderstring | undefinedundefinedreadonly
true, the user cannot modify the value.readonlybooleanfalserequired
true, the user must fill in a value before submitting a form.requiredbooleanfalsesize
"text" or "password", in which case it is an integer number of characters. This attribute applies only when the type attribute is set to "text", "search", "tel", "url", "email", or "password", otherwise it is ignored.sizenumber | undefinedundefinedspellcheck
true, the element will have its spelling and grammar checked.spellcheckbooleanfalsestep
"any" or a positive floating point number.stepstring | undefinedundefinedtype
type"date" | "datetime-local" | "email" | "month" | "number" | "password" | "search" | "tel" | "text" | "time" | "url" | "week"'text'value
valuenull | number | string | undefined''Events
| Name | Description | Bubbles |
|---|---|---|
ionBlur | Emitted when the input loses focus. | true |
ionChange | Emitted when the value has changed. | true |
ionFocus | Emitted when the input has focus. | true |
ionInput | Emitted when a keyboard input occurred. | true |
Methods
getInputElement
<input> element used under the hood.getInputElement() => Promise<HTMLInputElement>setFocus
input in ion-input. Use this method instead of the global input.focus().Developers who wish to focus an input when a page enters should call
setFocus() in the ionViewDidEnter() lifecycle method.setFocus() => Promise<void>CSS Shadow Parts
No CSS shadow parts available for this component.
CSS Custom Properties
| Name | Description |
|---|---|
--background | Background of the input |
--color | Color of the input text |
--padding-bottom | Bottom padding of the input |
--padding-end | Right padding if direction is left-to-right, and left padding if direction is right-to-left of the input |
--padding-start | Left padding if direction is left-to-right, and right padding if direction is right-to-left of the input |
--padding-top | Top padding of the input |
--placeholder-color | Color of the input placeholder text |
--placeholder-font-style | Font style of the input placeholder text |
--placeholder-font-weight | Font weight of the input placeholder text |
--placeholder-opacity | Opacity of the input placeholder text |
Slots
No slots available for this component.