aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelix Nagel <info@felixnagel.com>2011-09-27 22:04:49 +0200
committerFelix Nagel <info@felixnagel.com>2011-09-27 22:06:03 +0200
commit9c43d64312f47aba82596495796eed25b04c6656 (patch)
tree623023ca3bfb5058a47f8f2c0b8d3f954d396539
parent257067c81baac222cbd64222b2d100da32c90fbd (diff)
downloadjquery-ui-9c43d64312f47aba82596495796eed25b04c6656.tar.gz
jquery-ui-9c43d64312f47aba82596495796eed25b04c6656.zip
Selectmenu: improved events and added test file with callbacks
-rw-r--r--tests/visual/selectmenu/disabled.html2
-rw-r--r--tests/visual/selectmenu/events.html72
-rw-r--r--ui/jquery.ui.selectmenu.js32
3 files changed, 91 insertions, 15 deletions
diff --git a/tests/visual/selectmenu/disabled.html b/tests/visual/selectmenu/disabled.html
index baf0dcf46..cf979a9ee 100644
--- a/tests/visual/selectmenu/disabled.html
+++ b/tests/visual/selectmenu/disabled.html
@@ -2,7 +2,7 @@
<html lang="en">
<head>
<meta charset="utf-8">
- <title>jQuery UI Selectmenu - Default functionality</title>
+ <title>jQuery UI Selectmenu - Disable functionality</title>
<link rel="stylesheet" href="../../../themes/base/jquery.ui.all.css">
<script src="../../../jquery-1.6.2.js"></script>
<script src="../../../ui/jquery.ui.core.js"></script>
diff --git a/tests/visual/selectmenu/events.html b/tests/visual/selectmenu/events.html
new file mode 100644
index 000000000..0d5e3ee67
--- /dev/null
+++ b/tests/visual/selectmenu/events.html
@@ -0,0 +1,72 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+ <title>jQuery UI Selectmenu - Event functionality</title>
+ <link rel="stylesheet" href="../../../themes/base/jquery.ui.all.css">
+ <script src="../../../jquery-1.6.2.js"></script>
+ <script src="../../../ui/jquery.ui.core.js"></script>
+ <script src="../../../ui/jquery.ui.widget.js"></script>
+ <script src="../../../ui/jquery.ui.position.js"></script>
+ <script src="../../../ui/jquery.ui.button.js"></script>
+ <script src="../../../ui/jquery.ui.menu.js"></script>
+ <script src="../../../ui/jquery.ui.selectmenu.js"></script>
+ <link rel="stylesheet" href="../../../demos/demos.css">
+ <script>
+ $(function() {
+ var log = $("#log");
+ var index = 0;
+ $('select').selectmenu({
+ open: function(event, ui) {
+ $("<div/>").text( index++ + " Opened").prependTo(log);
+ },
+ close: function(event, ui) {
+ $("<div/>").text( index++ + " Closed").prependTo(log);
+ },
+ focus : function(event, ui) {
+ $("<div/>").text( index++ + " Focused: " + ui.item.label).prependTo(log);
+ },
+ select: function(event, ui) {
+ $("<div/>").text( index++ + " Selected: " + ui.item.label).prependTo(log);
+ },
+ change: function(event, ui) {
+ $("<div/>").text( index++ + " Changed to: " + ui.item.label).prependTo(log);
+ }
+ });
+ });
+ </script>
+ <style>
+ form { margin: 20px 0 0 0 }
+ fieldset { border: 0; }
+ select { width: 200px; }
+ .overflow ul { height: 200px; overflow: auto; }
+ </style>
+</head>
+<body>
+
+<div class="demo">
+
+
+<div class="ui-widget" style="float: left; margin-top:2em; font-family:Arial">
+ Log:
+ <div id="log" style="height: 400px; width: 270px; overflow: auto;" class="ui-widget-content"></div>
+</div>
+
+<form action="#">
+ <fieldset>
+ <label for="speed">Select a speed:</label>
+ <select name="speed" id="speed">
+ <option value="Slower">Slower</option>
+ <option value="Slow">Slow</option>
+ <option value="Medium" selected="selected">Medium</option>
+ <option value="Fast">Fast</option>
+ <option value="Faster">Faster</option>
+ </select>
+</form>
+
+</div><!-- End demo -->
+
+
+
+</body>
+</html>
diff --git a/ui/jquery.ui.selectmenu.js b/ui/jquery.ui.selectmenu.js
index 6d54fa248..38688b845 100644
--- a/ui/jquery.ui.selectmenu.js
+++ b/ui/jquery.ui.selectmenu.js
@@ -189,9 +189,9 @@ $.widget( "ui.selectmenu", {
item.element = self.items[ item.index ];
self._trigger( "select", event, { item: item } );
- self.close( event, true);
-
if ( flag ) self._trigger( "change", event, { item: item } );
+
+ self.close( event, true);
},
focus: function( event, ui ) {
self._trigger( "focus", event, { item: ui.item.data( "item.selectmenu" ) } );
@@ -269,19 +269,21 @@ $.widget( "ui.selectmenu", {
close: function( event, focus ) {
var self = this,
options = this.options;
-
- if ( options.dropdown ) {
- self.newelement
- .addClass( 'ui-corner-all' )
- .removeClass( 'ui-corner-top' );
+
+ if ( self.opened ) {
+ if ( options.dropdown ) {
+ self.newelement
+ .addClass( 'ui-corner-all' )
+ .removeClass( 'ui-corner-top' );
+ }
+
+ self.listWrap.removeClass( self.widgetBaseClass + '-open' );
+ this.opened = false;
+
+ if (focus) self.newelement.focus();
+
+ self._trigger( "close", event );
}
-
- self.listWrap.removeClass( self.widgetBaseClass + '-open' );
- this.opened = false;
-
- if (focus) self.newelement.focus();
-
- self._trigger( "close", event );
},
_renderMenu: function( ul, items ) {
@@ -314,6 +316,8 @@ $.widget( "ui.selectmenu", {
},
_move: function( key, event ) {
+ // TODO this focus is needed to make the select below work,
+ // but should be removed as its fires an unwanted focus event
if ( !this.opened ) {
this.list.menu( "focus", event, this._getSelectedItem() );
}