Yahoo! Developer Network Home - Help

YDN Site Search

# YUI Library Examples: Button Control: Split Buttons

# Button Control: Split Buttons

This example demonstrates different ways to create a Split Button.

View example in new window.

Split Buttons
From Markup
Split Button 3 Menu
From JavaScript

## Creating Split Buttons

With the inclusion of the optional Menu library, it is possible to create Buttons that incorporate a menu.

Split Buttons can be created with or without existing HTML. In either case, create a Split Button by setting the "type" configuration attribute to "split" and the "menu" configuration attribute to one of the following values:

- Object specifying a YAHOO.widget.Menu instance.
- Object specifying a YAHOO.widget.Overlay instance.
- String specifying the id attribute of the `<div/>` element used to create the menu. By default the menu will be created as an instance of YAHOO.widget.Overlay. If the default CSS class name for YAHOO.widget.Menu is applied to the `<div/>` element, it will be created as an instance of YAHOO.widget.Menu.
- String specifying the id attribute of the `<select/>` element used to create the menu.
- Object specifying the `<select/>` element used to create the menu.
- Array of object literals, each representing a set of YAHOO.widget.MenuItem configuration properties.
- Array of strings representing the text labels for each item in the menu.

Since the "menu" attribute can be set to the id of an existing `<select/>` element, a Split Button can be used to collapse two HTML form controls (`<input/>` and `<select/>`) into one DHTML control. For example, consider the following HTML:

<input type="submit" id="splitbutton1" name="splitbutton1_button" value="Split Button 1"> <select id="splitbutton1select" name="splitbutton1select" multiple> <option value="0">One</option> <option value="1">Two</option> <option value="2">Three</option> </select> <input type="button" id="splitbutton2" name="splitbutton2_button" value="Split Button 2"> <select id="splitbutton2select" name="splitbutton2select"> <option value="0">One</option> <option value="1">Two</option> <option value="2">Three</option> </select>

To instantiate a Split Button, pass the id of the source element as the first argument to the Button's constructor. Set the "type" configuration attribute to "menu" and the "menu" configuration attribute to the id of the Button's corresponding `<select/>` element.

var oSplitButton1 = new YAHOO.widget.Button("splitbutton1", { type: "split", menu: "splitbutton1select" }); var oSplitButton2 = new YAHOO.widget.Button("splitbutton2", { type: "split", menu: "splitbutton2select" });

Please note: If the source `<input/>` element's type was "submit," the Split Button will automatically submit its parent form when the user clicks or presses the button or chooses an option from the its menu.

Another way to create a Split Button from markup is to begin with an `<input/>` element and the markup format required for YAHOO.widget.Overlay:

<input type="button" id="splitbutton3" name="splitbutton3_button" value="Split Button 3"> <div id="splitbutton3menu" class="yui-overlay"> <div class="bd">Split Button 3 Menu</div> </div>

To instantiate the Split Button, pass the id of the source element as the first argument to the Button's constructor. Set the "type" configuration attribute to "menu" and the "menu" configuration attribute to the id or node reference of the HTML element to be used to create the Overlay: var oSplitButton3 = new YAHOO.widget.Button("splitbutton3", { type: "split", menu: "splitbutton3menu" });

Using an Overlay instance as a Split Button's menu is useful when you need a simple container to house HTML content or another YUI widget, such as a Calendar or Color Picker.

It is also possible to create a Split Button that utilizes YAHOO.widget.Overlay completely from JavaScript. Simply instantiate and render an Overlay instance. Then instantiate a Split Button, setting its "type" configuration attribute to "menu" and its "menu" configuration attribute to the Overlay instance via an object literal passed as a single argument to the Button's constructor:

/* Search for an element to place the Split Button into via the Event utilities "onContentReady" method */ YAHOO.util.Event.onContentReady("splitbuttonsfromjavascript", function () { // Instantiate an Overlay instance var oOverlay = new YAHOO.widget.Overlay("splitbutton5menu", { visible: false }); oOverlay.setBody("Split Button 5 Menu"); // Instantiate a Split Button var oSplitButton5 = new YAHOO.widget.Button({ type: "split", label: "Split Button 5", menu: oOverlay }); /* Append the Split Button and Overlay to the element with the id of "splitbuttonsfromjavascript" */ oSplitButton5.appendTo(this); oOverlay.render(this); });

Another easy way to create a Split Button from JavaScript is to set the "menu" configuration property to an array of YAHOO.widget.MenuItem configuration properties.

// Create an array of YAHOO.widget.MenuItem configuration properties var aSplitButton4Menu = [ { text: "one", value: 1 }, { text: "two", value: 2 }, { text: "three", value: 3 } ]; /* Instantiate a Split Button using the array of YAHOO.widget.MenuItem configuration properties as the value for the "menu" configuration attribute. */ var oSplitButton4 = new YAHOO.widget.Button({ type: "split", label: "Split Button 4", name: "splitbutton3", menu: aSplitButton4Menu, container: "splitbuttonsfromjavascript" });

### YUI Logger Output:

Note: Logging and debugging is currently turned off for this example.

Reload with logging
and debugging enabled.

### Button Control Examples:

- Push Buttons
- Link Buttons
- Checkbox Buttons
- Radio Buttons
- Submit Buttons
- Reset Buttons
- Menu Buttons
- Split Buttons
- Calendar Menu Button
- Calendar Menu Button
- Color Picker Button
- Fixed Width Menu Button
- Glowing Button
- Slider Button
- Showing and Hiding Columns (included with examples for DataTable Control (beta))
- Getting CSS Style Sheets (included with examples for Get Utility)
- Complex Application (included with examples for Layout Manager (beta))

### More Button Control Resources:

- User's Guide (external)
- API Documentation
- Cheat Sheet PDF (external)

Copyright © 2008 Yahoo! Inc. All rights reserved.

Privacy Policy - Terms of Service - Copyright Policy - Job Openings