This example illustrates how to use Button to mimic the behavior of an
HTML <select>
element.
By including the Menu family of controls, it is
possible to create menu buttons that mimic the behavior of HTML
<select>
elements.
Menu buttons can either replace existing <select>
elements
or can be created completely from script.
To replace an existing <select>
element with a menu button,
simply set the Button's menu
attribute to the id of the
<select>
element using an object literal passed to the
Button's constructor. In this example, the following snippets of HTML and
JavaScript are used to transform the first <select>
element
into a menu button.
To create a menu button without existing markup, simply set the menu
configuration property to an array of
MenuItem configuration
properties, as illustrated by the code used to create the third menu
button in this example:
<select>
Behavior & Style Customizations
To mimic the behavior of an HTML <select>
element, the
label of the Button needs to reflect the currently selected MenuItem in the
Button's Menu. To update the Button's label
attribute when the
user clicks on a MenuItem, simply register a listener for the Button's
selectedMenuItemChange
event that sets the value of the
Button's label
attribute to the value of the text
configuration property of the selected MenuItem instance. The following
example illustrates how a selectedMenuItemChange
event listener
is added to the first Button in this example.
It is also necessary to customize the style of the menu button, to indicate
the currently selected item in each Button's menu. When the value of the
Button's selectedMenuItem
attribute changes, Button adds a class
named "yui-button-selectedmenuitem" to the <li>
element of
the currently selected MenuItem. This class can be used to provide a custom
style to the currently selected MenuItem in a Button's Menu. In this example,
a Button's currently selected MenuItem is rendered with a check mark to the
left of its text label.
In addition to styling a Button's selected MenuItem, the label of each Button
in this example is set to a fixed width. This is is accomplished by wrapping
the text label of each Button in an <em>
tag and setting
the <em>
's width
property to 5em
,
and the overflow
property to hidden
.
In HTML, it is possible to specify a default value for a
<select>
element by applying the selected
attribute to one of the <select>
's
<option>
elements. If a menu button is replacing an
existing <select>
element, the default value will
automatically be interpreted from the <select>
's
<option>
elements.
If a default value is desired for a menu button built completely from script,
it is necessary to specify the default value by setting the
selectedMenuItem
attribute. The following code illustrates how
a default value was specified for the the fourth Button in this example.
For performance, a Button's Menu is lazy loaded by default the MenuItems
are initialized and the Menu's HTML is rendered to the page the first time the
Button is clicked. If the user never clicks on the Button, its Menu
will never be rendered, meaning the render
event handler used to
set the default value of the selectedMenuItem
attribute will never
be called. In such cases it is necessary to add a submit
event
handler to the Button's parent form that will render the Menu if the Button's
selectedMenuItem
attribute is not set. The following code
illustrates how a submit
event handler is added to the parent
form of the third button in this example.
You can load the necessary JavaScript and CSS for this example from Yahoo's servers. Click here to load the YUI Dependency Configurator with all of this example's dependencies preconfigured.
Note: Logging and debugging is currently turned off for this example.
Copyright © 2009 Yahoo! Inc. All rights reserved.
Privacy Policy - Terms of Service - Copyright Policy - Job Openings