Skip to main content

Jquery Mobile Form - Text inputs

    In this post on "form text input's" styling and usage using Jquery Mobile we will cover various input types and textarea styling using JQM. We will also cover the various attributes that can be used with the input types. 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.

    The text input elements are available in 2 flavors/sizes - regular and mini. Following is a standard HTML syntax for an input element.


    Adding a data attribute data-mini="true" to the input tag renders a smaller sized input element. Let's take a look at the code sample below to understand the working in a better way.

    Apart from the regular input type, to accept multi-line input, use the textarea element. The advantage of using textarea in Jquery Mobile is that, the framework auto grows the height of the textarea, avoiding the need for the content in the textarea to be scrolled internally. In the example below, you will see to implementations of textareas - one with label and textarea on 2 separate lines and the other with the label and textarea on the same line.



    In the code above, you will see 4 different implementations of the input element. The first one is a regular input of type text with the label and the textbox one below the other. The second implementation is exactly similar to the first implementation with the only difference of the added data attribute "data-mini="true"" which reduces the size (basically height) of the textbox.

    The third implementation gets the label and the textbox on the same line. This implementation is done using a div with data attribute data-role="fieldcontain" around the label and input tags. This div has to be within a form tag. Maintaining the HTML structure is very important when using JQuery Mobile framework.

    In the fourth implementation, we have used the HTML5 placeholder property and done away with the label completely. However, for the sake of accessibility, we have included the label tag with class="ui-hidden-accessible" so that the label is not displayed but is present in the HTML structure. This implementation is popularly used on mobile sites as this reduces the amount of scroll.

    To disable the input field just add the keyword "disabled" to the input tag and your input type would be disabled.

    A note on accessibility:
    For the sake of accessibility, jQuery Mobile requires that all form elements be paired with a meaningful label. To hide labels in a way that leaves them visible to assistive technologies — for example, when letting an element's placeholder attribute serve as a label — apply the helper class ui-hidden-accessible to the label itself. While the label will no longer be visible, it will be available to assisitive technologies such as screen readers.

    You can use the various input types supported in HTML5. The advantage of using the HTML5 input types is that keybords default to the particular input type are displayed by default. The following example demonstrates the various HTML5 input types that you can use. Try out the example on a mobile device and you will see for yourself the various keyboards that default the particular input type.



    The mobile browsers that do not support the new HTML5 input types will fall back to the default input type="text" and show the default alpha-numeric keyboard. Adding the images (screenshots) of default keyboards displayed for different input types on the Android and iOS devices, to this post would make the post really long and so I have included these images here.

    Hope this post has been informative to you and helps you use the various input types effectively in your next Jquery Mobile based application. Drop a comment to let me know what you feel about this post as well as the earlier series on Jquery Mobile listview. Share the post if is has helped you, so that maximum developers benefit from this one. Till next time, happy coding!

Comments

Recommended for You

Side-scrolling web pages issue with Jquery Mobile - Issue #5748

    While developing a Jquery mobile based application, I came across a issue that is observed only on the iOS 6 devices and Android 4.2.2 devices.     What is the issue?         Web pages are side scrolling on iOS6 and Android 4.2.2 devices.     How did I debug the issue?         This bug was in our applications bug tracker for a long time and since I am the lone front-end developer the project that I am working on, my manger was pushing me to close this bug quickly. I had used the perfect mobile meta tag and still the web pages were side-scrolling. None of my divs had width that was going beyond the device widths and still there was this issue. That day, I decided to break down my HTML to pieces, and tested each piece on the dreadful iOS 6 device. I came down to a textbox that had some placeholder text in it and there it was, the issue was glaring me in my face. ...

Hilarious Google Maps

       I came across these simple yet wonderfully done illustrations based on the Google Maps Street style by Christoph Niemann - Illustrator for the Times Magazine. These illustrations are absolutely stunning show of creativity, design, execution and general beauty. All the illustrations show exactly how it is on the roads in New York. Sit back and enjoy the show.

Google Weather Layer - Simple Example

    As promised in the last post , we will be having a look at a very simple example that will help us understand how we can use the weather layer effectively in our Google Map applications using the Google Maps API v3. The weather layer is basically a combination of 2 layers - the Weather Layer and the Clouds Layer . The weather layers displays the weather icons and the temperature corresponding that icon whereas the clouds layers displays the cloud cover across the globe. We can choose to display or hide any of these layers. Let us now dive into a very simple code that will help us understand the basics of the Weather Layer library today.     The output of the above code will appear as seen in the result section above. You will find a map centered at "India" with both the weather and cloud layers enabled!     Most part of the above code is similar to most other examples you will find...

Punjab cities to implement GIS...

            The Punjab government is all set to implement ultra modern GIS systems in 6 big cities of Punjab namely Amritsar, Ludhiana, Jalandhar, Patiala, Batinda and Pathakot to facilitate future planning, expansion and maintenance of civic infrastructure in these cities. The GIS will be implemented in these cities by October 31, 2011, which would be further implemented in other districts of the state.             Complete information of these cities will be available on the GIS which should prove beneficial and helpful during the preparation of "Master Plans" of these cities in the future. The satellite images of these cities will be taken which would later on be developed to form a large database. The maps that will be generated would provide detailed information on roads and rail networking along with exact locations of bus stops and railway stations. The maps will also s...

Two maps on the same page - Side-by-side

    How good I am feeling to post a code example after such a long time! It's been all "news" over the past so many posts! Well now that I am finally doing a code example, I am posting a very highly requested code sample. Placing two Google Maps on the same page (Now that's simple you would say!), but side by side. Now this is the thing that most people struggle with. Well, implementing the second part is also very simple, as you will see in today's code.     Let's see the code. Here it is!     The output of the above code will be as seen in the result section above.     As most of you will realize, there are two maps, one centered at "Pune" and other at "Noida". Why I chose these two locations? Well, just like that!...The main issue of concern is how the maps appeared side-by-side and not one below the other as would be normal behavior of two "div" elements used in the same page. Now here is the trick! Check out the...