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.
Text inputs
To collect standard alphanumeric text, use an
input
with a type="text"
attribute. Set the for
attribute of thelabel
to match the ID of the input
so they are semantically associated. It's possible to accessibly hide the labelif it's not desired in the page layout, but we require that it is present in the markup for semantic and accessibility reasons.
<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 stacks the label on a separate line.
Optionally wrap the text input in a container with the
data-role="fieldcontain"
attribute to help visually group it in a longer form.
<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 displays the range
input renders as a slider — so we standardize their appearance by dynamically changing their type to text
(currently, this applies to range
and search
). 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.
<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:
<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, no 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:
$('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 themable 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.
No comments:
Post a Comment