diff --git a/demos/selectmenu/methods.html b/demos/selectmenu/methods.html index d44581d8047..85c4dfaa8d4 100644 --- a/demos/selectmenu/methods.html +++ b/demos/selectmenu/methods.html @@ -25,26 +25,68 @@ var speedA = $('select#speedA').selectmenu(); $("#index").click(function(event){ + event.preventDefault(); console.log($('select#speedA').selectmenu("index")); }); $("#indexNumber").click(function(event){ + event.preventDefault(); console.log($('select#speedA').selectmenu("index", 4)); }); $("#value").click(function(event){ + event.preventDefault(); console.log($('select#speedA').selectmenu("value")); }); $("#valueString").click(function(event){ + event.preventDefault(); console.log($('select#speedA').selectmenu("value", "Medium")); }); $("#valueNumber").click(function(event){ + event.preventDefault(); console.log($('select#speedA').selectmenu("value", 4)); }); $("#valueNumberAsString").click(function(event){ + event.preventDefault(); console.log($('select#speedA').selectmenu("value", "11")); }); $("#valueNonExisting").click(function(event){ + event.preventDefault(); console.log($('select#speedA').selectmenu("value", "test123")); }); + + // Alex L. + + $('#disableSlow').click(function(e){ + e.preventDefault(); + $('select#speedA').selectmenu('disableByValue', 'Slow'); + }); + + $('#disable11').click(function(e){ + e.preventDefault(); + $('select#speedA').selectmenu('disableByValue', '11'); + }); + + $('#disableEverythingButSlow').click(function(e){ + e.preventDefault(); + + $('select#speedA').selectmenu('enableByValue', 'Slow'); + + $('select#speedA').selectmenu('disableByValue', 'Slower'); + $('select#speedA').selectmenu('disableByValue', 'Medium'); + $('select#speedA').selectmenu('disableByValue', 'Fast'); + $('select#speedA').selectmenu('disableByValue', 'Faster'); + $('select#speedA').selectmenu('disableByValue', '11'); + }); + + $('#disableAll').click(function(e){ + e.preventDefault(); + $('select#speedA').selectmenu('disableAll'); + }); + + $('#enableAll').click(function(e){ + e.preventDefault(); + $('select#speedA').selectmenu('enableAll'); + }); + }); @@ -59,6 +101,14 @@ method value with paramater '4' (passed as number)
method value with paramater '11' (passed as string)
method value with paramater 'test123' (not existing value) +
+ Disable "Slow" option
+ Disable "Up to eleven" option
+ Disable everything but "Slow"
+ Disable All
+ Enable All + +

"default popup" Style

diff --git a/ui/jquery.ui.selectmenu.js b/ui/jquery.ui.selectmenu.js index d878ec5c2bc..acddf1d2cf5 100644 --- a/ui/jquery.ui.selectmenu.js +++ b/ui/jquery.ui.selectmenu.js @@ -29,6 +29,7 @@ $.widget("ui.selectmenu", { icons: null, format: null, escapeHtml: false, + transferClasses: true, bgImage: function() {} }, @@ -405,6 +406,12 @@ $.widget("ui.selectmenu", { .toggleClass( 'ui-icon-triangle-1-s', isDropDown ) .toggleClass( 'ui-icon-triangle-2-n-s', !isDropDown ); + // transfer classes to selectmenu and list + if ( o.transferClasses ) { + var transferClasses = this.element.attr( 'class' ) || ''; + this.newelement.add( this.list ).addClass( transferClasses ); + } + // set menu width to either menuWidth option value, width option value, or select width if ( o.style == 'dropdown' ) { this.list.width( o.menuWidth ? o.menuWidth : o.width ); @@ -803,6 +810,80 @@ $.widget("ui.selectmenu", { } }, + indexByValue: function(val) { + var idx = null; + this.element.find('option').each(function(i, opt){ + if ( opt.value == val ) { + idx = opt.index; + return false; + } + }); + return idx; + }, + + _isEnabled: function(idx) { + var self = this, + found = null; + + this.element.find('option').each(function(i, opt){ + if ( opt.index == idx ) { + found = !opt.disabled; + return false; + } + }); + return found; + }, + + disableAll: function() { + var self = this; + this.element.find('option').each(function(i, opt){ + if ( !opt.disabled ) { + self.disable(opt.index); + } + }); + this.disable(); + }, + + enableAll: function() { + var self = this; + if ( this.options.disabled ) { + this.enable(); + } + this.element.find('option').each(function(i, opt){ + self.enable(opt.index); + }); + }, + + disableByValue: function(val) { + var idx = this.indexByValue(val); + if ( idx !== null ) { + if ( this.index() == idx ) { + + if ( this._isEnabled(idx+1) ) { + this.index(idx+1); + } else if ( this._isEnabled(idx-1) ) { + this.index(idx-1); + } else { + this.disable(); + } + + } + this.disable(idx); + } + }, + + enableByValue: function(val) { + var idx = this.indexByValue(val); + if ( idx ) { + + if ( this.options.disabled ) { + this.enable(); + } + + this.enable(idx); + } + }, + value: function(newValue) { if (arguments.length) { this.element[0].value = newValue;