Textinput Widget


Textinput Widgetversion added: 1.0

Description: Creates a textinput widget for textinput, textarea or search input

QuickNavExamples

Methods

Events

Text Input

Text inputs and textareas are coded with standard HTML elements, then enhanced by jQuery Mobile to make them more attractive and useable on a mobile device. View the data- attribute reference to see all the possible attributes you can add to text inputs.

To collect standard alphanumeric text, use an input with a type="text" attribute. Set the for attribute of the label to match the id of the input so they are semantically associated. It's possible to accessibly hide the label if it's not desired in the page layout, but we require that it is present in the markup for semantic and accessibility reasons.

1
2
<label for="basic">Text Input:</label>
<input type="text" name="name" id="basic" value="" />

This will produce a basic text input. The default styles set the width of the input to 100% of the parent container and stack the label on a separate line.

Mini version

For a more compact version that is useful in toolbars and tight spaces, add the data-mini="true" attribute to the element to create a mini version.

1
2
<label for="basic">Text Input:</label>
<input type="text" name="name" id="basic" value="" data-mini="true" />

This will produce an input that is not as tall as the standard version and has a smaller text size.

Clear button option

To add a clear button to any input (like the search input), add the data-clear-btn="true" attribute. The text for this clear button can be customized via the data-clear-btn-text="clear input" attribute. Search buttons have the clear button by default and cannot be controlled by this option. Note that this is available for all the input types below except for textareas.

1
2
<label for="clear-demo">Text Input:</label>
<input type="text" name="clear" id="clear-demo" value="" data-clear-btn="true" />

This markup creates a text input with a clear button that becomes visible as soon as a character has been entered.

Field containers

Optionally wrap the text input in a container with the data-role="fieldcontain" attribute to help visually group it in a longer form.

1
2
3
4
<div data-role="fieldcontain">
<label for="name">Text Input:</label>
<input type="text" name="name" id="name" value="" />
</div>

The text input is now displayed like this:

More text input types

In jQuery Mobile, you can use existing and new HTML5 input types such as password, email, tel, number, and more. Some type values are rendered differently across browsers. For example, Chrome renders the range input as a slider. jQuery Mobile standardizes the appearance of range and search by dynamically changing their type to text. You can configure which input types are degraded to text with the page plugin's options.

One major advantage of using these more specific input types if that on mobile devices, specialized keyboards that speed data entry are offered in place of the standard text keyboard. Try the following inputs on a mobile device to see which display custom keyboards on various platforms.

Textareas

For multi-line text inputs, use a textarea element. The framework will auto-grow the height of the textarea to avoid the need for an internal scrollbar.

Set the for attribute of the label to match the id of the textarea so they are semantically associated, and wrap them in a div with the data-role="fieldcontain" attribute to group them.

1
2
3
4
<label for="textarea-a">Textarea:</label>
<textarea name="textarea" id="textarea-a">
I'm a basic textarea. If this is pre-populated with content, the height will be automatically adjusted to fit without needing to scroll. That is a pretty handy usability feature.
</textarea>

This will produce a basic textarea with the width set to 100% of the parent container and the label stacked on a separate line. The textarea will grow to fit new lines as you type:

1
2
3
4
<div data-role="fieldcontain">
<label for="textarea">Textarea:</label>
<textarea name="textarea" id="textarea"></textarea>
</div>

The textarea is displayed like this and will grow to fit new lines as you type:

Calling the textinput plugin

This plugin will auto initialize on any page that contains a textarea or any of the text input types listed above without any need for a data-role attribute in the markup. However, if needed, you can directly call the textinput plugin on any selector, just like any jQuery plugin:

1
$( "input" ).textinput();

Degraded input types

jQuery Mobile degrades several HTML5 input types back to type=text or type=number after adding enhanced controls. For example, inputs with a type of range are enhanced with a custom slider control, and their type is set to number to offer a usable form input alongside that slider. Inputs with a type of search are degraded back to type=text after we add our own themeable search input styling.

The page plugin contains a list of input types that are set to either true which means they'll degrade to type=text, false which means they'll be left alone, or a string such as "number", which means they'll be converted to that type (such as the case of type=range).

You can configure which types are changed via the page plugin's degradeInputs option, which can be manipulated externally via $.mobile.page.prototype.options.degradeInputs, which has properties: color, date, datetime, "datetime-local", email, month, number, range, search, tel, time, url, and week. Be sure to configure this inside an event handler bound to the mobileinit event, so that it applies to the first page as well as subsequent pages that are loaded.

Search Input

Search inputs are a new HTML type that is styled with pill-shaped corners and adds an "x" icon to clear the field once you start typing. Start with an input with a type="search" attribute in your markup.

Set the for attribute of the label to match the id of the input so they are semantically associated. It's possible to accessibly hide the label if it's not desired in the page layout, but we require that it is present in the markup for semantic and accessibility reasons.

1
2
<label for="search-basic">Search Input:</label>
<input type="search" name="search" id="search-basic" value="" />

This will produce a basic search input. The default styles set the width of the input to 100% of the parent container and stack the label on a separate line.

Mini version

For a more compact version that is useful in toolbars and tight spaces, add the data-mini="true" attribute to the element to create a mini version.

1
2
<label for="search-mini">Search Input:</label>
<input type="search" name="search-mini" id="search-mini" value="" data-mini="true"/>

This will produce a search input that is not as tall as the standard version and has a smaller text size.

Field containers

Optionally wrap the search input in a container with the data-role="fieldcontain" attribute to help visually group it in a longer form.

1
2
3
4
<div data-role="fieldcontain">
<label for="search-2">Search Input:</label>
<input type="search" name="search-2" id="search-2" value="" />
</div>

The search input is now displayed like this:

Theming

The data-theme attribute can be added to the search input to set the theme to any swatch letter.

Setting the clear button text

The text for the button used to clear the search input of text can be configured for all search inputs by binding to the mobileinit event and setting the $.mobile.textinput.prototype.options.clearSearchButtonText property to a string of your choosing.

Calling the textinput plugin

This plugin will auto-initialize on any page that contains a text input with the type="search" attribute without any need for a data-role attribute in the markup. However, if needed, you can directly call the textinput plugin on a selector, just like any jQuery plugin:

1
$( ".mySearchInput" ).textinput();

Options

clearBtn 

Type: Boolean
Default: false
Adds a clear button to the input (not available for textareas).

This option is also exposed as a data attribute: data-clear-btn="true".

Code examples:

Initialize the textinput with the clearBtn option specified:

1
2
3
$( ".selector" ).textinput({
clearBtn: true
});

Get or set the clearBtn option, after initialization:

1
2
3
4
5
// Getter
var clearBtn = $( ".selector" ).textinput( "option", "clearBtn" );
// Setter
$( ".selector" ).textinput( "option", "clearBtn", true );

clearBtnText 

Type: String
Default: "clear text"
The text description for the optional clear button, useful for assistive technologies like screen readers.

This option is also exposed as a data attribute: data-clear-btn-text="Clear input".

Code examples:

Initialize the textinput with the clearBtnText option specified:

1
2
3
$( ".selector" ).textinput({
clearBtnText: "Clear value"
});

Get or set the clearBtnText option, after initialization:

1
2
3
4
5
// Getter
var clearBtnText = $( ".selector" ).textinput( "option", "clearBtnText" );
// Setter
$( ".selector" ).textinput( "option", "clearBtnText", "Clear value" );

disabled 

Type: Boolean
Default: false
Sets the default state of the text input to disabled when "true".
Code examples:

Initialize the textinput with the disabled option specified:

1
2
3
$( ".selector" ).textinput({
disabled: true
});

Get or set the disabled option, after initialization:

1
2
3
4
5
// Getter
var disabled = $( ".selector" ).textinput( "option", "disabled" );
// Setter
$( ".selector" ).textinput( "option", "disabled", true );

initSelector 

Default: input[type='text'], input[type='search'], :jqmData(type='search'), input[type='number'], :jqmData(type='number'), input[type='password'], input[type='email'], input[type='url'], input[type='tel'], textarea, input:not([type])
This is used to define the selectors (element types, data roles, etc.) that will automatically be initialized as textinputs. To change which elements are initialized, bind this option to the mobileinit event:
1
2
3
$( document ).on( "mobileinit", function() {
$.mobile.textinput.prototype.options.initSelector = ".myInputs";
});

mini 

Type: Boolean
Default: false
Sets the size of the element to a more compact, mini version.

This option is also exposed as a data attribute: data-mini="true".

Code examples:

Initialize the textinput with the mini option specified:

1
2
3
$( ".selector" ).textinput({
mini: true
});

Get or set the mini option, after initialization:

1
2
3
4
5
// Getter
var mini = $( ".selector" ).textinput( "option", "mini" );
// Setter
$( ".selector" ).textinput( "option", "mini", true );

preventFocusZoom 

Type: String
Default: true on iOS platforms
This option disables page zoom temporarily when a custom input is focused, which prevents iOS devices from zooming the page into the input. By default, iOS often zooms into form controls, and the behavior is often unnecessary and intrusive in mobile-optimized layouts.

This option is also exposed as a data attribute: data-prevent-focus-zoom="true".

Code examples:

Initialize the textinput with the preventFocusZoom option specified:

1
2
3
$( ".selector" ).textinput({
preventFocusZoom: true
});

Get or set the preventFocusZoom option, after initialization:

1
2
3
4
5
// Getter
var preventFocusZoom = $( ".selector" ).textinput( "option", "preventFocusZoom" );
// Setter
$( ".selector" ).textinput( "option", "preventFocusZoom", true );

theme 

Type: String
Default: null, inherited from parent
Sets the color scheme (swatch) for all instances of this widget. It accepts a single letter from a-z that maps to the swatches included in your theme. By default, it will inherit the same swatch color as its parent container if not explicitly set.

Possible values: swatch letter (a-z).

This option is also exposed as a data attribute: data-theme="a".

Code examples:

Initialize the textinput with the theme option specified:

1
2
3
$( ".selector" ).textinput({
theme: "a"
});

Get or set the theme option, after initialization:

1
2
3
4
5
// Getter
var theme = $( ".selector" ).textinput( "option", "theme" );
// Setter
$( ".selector" ).textinput( "option", "theme", "a" );

Methods

disable()Returns: jQuery (plugin only)

disable a text input.
  • This method does not accept any arguments.
Code examples:

Invoke the disable method:

1
$( ".selector" ).textinput( "disable" );

enable()Returns: jQuery (plugin only)

enable a disabled text input.
  • This method does not accept any arguments.
Code examples:

Invoke the enable method:

1
$( ".selector" ).textinput( "enable" );

Events

create()Type: textinputcreate

triggered when a text input is created
  • This method does not accept any arguments.

Note: The ui object is empty but included for consistency with other events.

Code examples:

Initialize the textinput with the create callback specified:

1
2
3
$( ".selector" ).textinput({
create: function( event, ui ) {}
});

Bind an event listener to the textinputcreate event:

1
$( ".selector" ).on( "textinputcreate", function( event, ui ) {} );

Examples:

A basic example of a search input field

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>textinput demo</title>
<link rel="stylesheet" href="//code.jquery.com/mobile/1.3.2/jquery.mobile-1.3.2.min.css">
<script src="//code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="//code.jquery.com/mobile/1.3.2/jquery.mobile-1.3.2.min.js"></script>
</head>
<body>
<div data-role="page" id="page1">
<div data-role="header">
<h1>jQuery Mobile Example</h1>
</div>
<div data-role="content">
<label for="basic">Text Input:</label>
<input type="text" name="name" id="basic" value="" />
</div>
</div>
</body>
</html>

Demo:

A basic example of a search input field

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>textinput demo</title>
<link rel="stylesheet" href="//code.jquery.com/mobile/1.3.2/jquery.mobile-1.3.2.min.css">
<script src="//code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="//code.jquery.com/mobile/1.3.2/jquery.mobile-1.3.2.min.js"></script>
</head>
<body>
<div data-role="page" id="page1">
<div data-role="header">
<h1>jQuery Mobile Example</h1>
</div>
<div data-role="content">
<label for="search-basic">Search Input:</label>
<input type="search" name="search" id="search-basic" value="" />
</div>
</div>
</body>
</html>

Demo: