Problem:

Updating the value of enhanced form elements does not work

Solution:

While some form elements that jQuery Mobile enhances are simply styled, some (like the slider) are custom controls built on top of native inputs. Changing the value of a normal input such as a text or search box will render the value immediately, but changing the value of a select menu, slider, or any other complex custom form control will require calling a refresh operation to re-enhance the control to reflect your new value.

Let's use the example of a Select Menu to demonstrate how to update the value on a complex control:


    // Some markup for a select menu
    <select>
      <option value="a">A</option>
      <option value="b">B</option>
      <option value="c">C</option>
    </select>

    // Your Javascript:
    <script>
    $('#page1').on('pagecreate', function() {
      // Update the select menu's value to 'c' and refresh the control
      $('select').val('c').selectmenu('refresh');
    });
    </script>

In the snippet above we have a simple select menu, and we are updating the value of the menu after the page has initialized. When jQuery Mobile enhances the page, the select menu will be modified to make it more mobile friendly and consistent across devices. That means the simple select menu we are used to interacting with needs a little more work to update. We can simply call $('select').selectmenu('refresh') to have our select menu update to its current value.

Other form inputs that require refreshing are the slider, the toggle switch, checkboxes, and radio buttons. To refresh the slider or the toggle switch, call slider('refresh'). To refresh the checkbox or radio controls, call checkboxradio('refresh').