diff options
Diffstat (limited to 'demos/autocomplete/combobox.html')
-rw-r--r-- | demos/autocomplete/combobox.html | 243 |
1 files changed, 142 insertions, 101 deletions
diff --git a/demos/autocomplete/combobox.html b/demos/autocomplete/combobox.html index 596423bc9..fd373f0e4 100644 --- a/demos/autocomplete/combobox.html +++ b/demos/autocomplete/combobox.html @@ -1,101 +1,135 @@ <!DOCTYPE html> <html lang="en"> <head> - <meta charset="UTF-8" /> - <title>jQuery UI Autocomplete Combobox Demo</title> - <link type="text/css" href="../../themes/base/jquery.ui.all.css" rel="stylesheet" /> - <script type="text/javascript" src="../../jquery-1.4.2.js"></script> - <script type="text/javascript" src="../../ui/jquery.ui.core.js"></script> - <script type="text/javascript" src="../../ui/jquery.ui.widget.js"></script> - <script type="text/javascript" src="../../ui/jquery.ui.button.js"></script> - <script type="text/javascript" src="../../ui/jquery.ui.position.js"></script> - <script type="text/javascript" src="../../ui/jquery.ui.autocomplete.js"></script> - <script type="text/javascript" src="../../ui/jquery.ui.tooltip.js"></script> - <link type="text/css" href="../demos.css" rel="stylesheet" /> - <style type="text/css"> - /* TODO shouldn't be necessary */ - .ui-button { margin-left: -1px; } - .ui-button-icon-only .ui-button-text { padding: 0.35em; } - .ui-autocomplete-input { margin: 0; padding: 0.48em 0 0.47em 0.45em; } + <meta charset="utf-8"> + <title>jQuery UI Autocomplete - Combobox</title> + <link rel="stylesheet" href="../../themes/base/jquery.ui.all.css"> + <script src="../../jquery-1.4.4.js"></script> + <script src="../../ui/jquery.ui.core.js"></script> + <script src="../../ui/jquery.ui.widget.js"></script> + <script src="../../ui/jquery.ui.button.js"></script> + <script src="../../ui/jquery.ui.position.js"></script> + <script src="../../ui/jquery.ui.menu.js"></script> + <script src="../../ui/jquery.ui.autocomplete.js"></script> + <script src="../../ui/jquery.ui.tooltip.js"></script> + <link rel="stylesheet" href="../demos.css"> + <style> + .ui-button { margin-left: -1px; } + .ui-button-icon-only .ui-button-text { padding: 0.35em; } + .ui-autocomplete-input { margin: 0; padding: 0.48em 0 0.47em 0.45em; } </style> - <script type="text/javascript"> - (function($) { - $.widget("ui.combobox", { + <script> + (function( $ ) { + $.widget( "ui.combobox", { _create: function() { - var self = this; - var select = this.element.hide(); - var input = $("<input>") - .insertAfter(select) + var self = this, + select = this.element.hide(), + selected = select.children( ":selected" ), + value = selected.val() ? selected.text() : ""; + var input = this.input = $( "<input>" ) + .insertAfter( select ) + .val( value ) .autocomplete({ - source: function(request, response) { - var matcher = new RegExp(request.term, "i"); - response(select.children("option").map(function() { - var text = $(this).text(); - if (this.value && (!request.term || matcher.test(text))) + delay: 0, + minLength: 0, + source: function( request, response ) { + var matcher = new RegExp( $.ui.autocomplete.escapeRegex(request.term), "i" ); + response( select.children( "option" ).map(function() { + var text = $( this ).text(); + if ( this.value && ( !request.term || matcher.test(text) ) ) return { - id: this.value, - label: text.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + $.ui.autocomplete.escapeRegex(request.term) + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<strong>$1</strong>"), - value: text + label: text.replace( + new RegExp( + "(?![^&;]+;)(?!<[^<>]*)(" + + $.ui.autocomplete.escapeRegex(request.term) + + ")(?![^<>]*>)(?![^&;]+;)", "gi" + ), "<strong>$1</strong>" ), + value: text, + option: this }; - })); + }) ); }, - delay: 0, - change: function(event, ui) { - if (!ui.item) { - var value = this.value; - // remove invalid value, as it didn't match anything, and display a hint - $(this).val("").attr("title", value + " didn't match any item").tooltip("open"); - setTimeout(function() { - input.tooltip("close").attr("title", ""); - }, 2500); - return false; - } - select.val(ui.item.id); - self._trigger("selected", event, { - item: select.find("[value='" + ui.item.id + "']") + select: function( event, ui ) { + ui.item.option.selected = true; + self._trigger( "selected", event, { + item: ui.item.option }); - }, - minLength: 0 + change: function( event, ui ) { + if ( !ui.item ) { + var matcher = new RegExp( "^" + $.ui.autocomplete.escapeRegex( $(this).val() ) + "$", "i" ), + valid = false; + select.children( "option" ).each(function() { + if ( $( this ).text().match( matcher ) ) { + this.selected = valid = true; + return false; + } + }); + if ( !valid ) { + // remove invalid value, as it didn't match anything + $(this).val( "").attr( "title", value + " didn't match any item" ).tooltip( "open" ); + setTimeout( function() { + input.tooltip( "close" ).attr( "title", "" ); + }, 2500 ); + input.data( "autocomplete" ).term = ""; + return false; + } + } + } + }) + .addClass( "ui-widget ui-widget-content ui-corner-left" ); + + input.data( "autocomplete" )._renderItem = function( ul, item ) { + return $( "<li></li>" ) + .data( "item.autocomplete", item ) + .append( "<a>" + item.label + "</a>" ) + .appendTo( ul ); + }; + + this.button = $( "<button type='button'> </button>" ) + .attr( "tabIndex", -1 ) + .attr( "title", "Show All Items" ) + .insertAfter( input ) + .button({ + icons: { + primary: "ui-icon-triangle-1-s" + }, + text: false }) - .addClass("ui-widget ui-widget-content ui-corner-left"); - var button = $("<button> </button>") - .attr("tabIndex", -1) - .attr("title", "Show All Items") - .insertAfter(input) - .button({ - icons: { - primary: "ui-icon-triangle-1-s" - }, - text: false - }).removeClass("ui-corner-all") - .addClass("ui-corner-right ui-button-icon") - .click(function() { - // close if already visible - if (input.autocomplete("widget").is(":visible")) { - input.autocomplete("close"); - return; - } - // pass empty string as value to search for, displaying all results - input.autocomplete("search", ""); - input.focus(); - }); - - input.tooltip({ - position: { - offset: (button.width() + 5) + " 0" - }, - tooltipClass: "ui-state-highlight" - }); + .removeClass( "ui-corner-all" ) + .addClass( "ui-corner-right ui-button-icon" ) + .click(function() { + // close if already visible + if ( input.autocomplete( "widget" ).is( ":visible" ) ) { + input.autocomplete( "close" ); + return; + } + + // pass empty string as value to search for, displaying all results + input.autocomplete( "search", "" ); + input.focus(); + }); + + input.tooltip( { + position: { + offset: (this.button.width() + 5) + " 0" + } + }).tooltip( "widget" ).addClass( "ui-state-highlight" ); + }, + + destroy: function() { + this.input.remove(); + this.button.remove(); + this.element.show(); + $.Widget.prototype.destroy.call( this ); } }); + })( jQuery ); - })(jQuery); - $(function() { - $("#combobox").combobox(); - $("#toggle").click(function() { - $("#combobox").toggle(); + $( "#combobox" ).combobox(); + $( "#toggle" ).click(function() { + $( "#combobox" ).toggle(); }); }); </script> @@ -108,32 +142,39 @@ <label>Your preferred programming language: </label> <select id="combobox"> <option value="">Select one...</option> - <option value="a">asp</option> - <option value="c">c</option> - <option value="cpp">c++</option> - <option value="cf">coldfusion</option> - <option value="g">groovy</option> - <option value="h">haskell</option> - <option value="j">java</option> - <option value="js">javascript</option> - <option value="p1">perl</option> - <option value="p2">php</option> - <option value="p3">python</option> - <option value="r">ruby</option> - <option value="s">scala</option> + <option value="ActionScript">ActionScript</option> + <option value="AppleScript">AppleScript</option> + <option value="Asp">Asp</option> + <option value="BASIC">BASIC</option> + <option value="C">C</option> + <option value="C++">C++</option> + <option value="Clojure">Clojure</option> + <option value="COBOL">COBOL</option> + <option value="ColdFusion">ColdFusion</option> + <option value="Erlang">Erlang</option> + <option value="Fortran">Fortran</option> + <option value="Groovy">Groovy</option> + <option value="Haskell">Haskell</option> + <option value="Java">Java</option> + <option value="JavaScript">JavaScript</option> + <option value="Lisp">Lisp</option> + <option value="Perl">Perl</option> + <option value="PHP">PHP</option> + <option value="Python">Python</option> + <option value="Ruby">Ruby</option> + <option value="Scala">Scala</option> + <option value="Scheme">Scheme</option> </select> </div> <button id="toggle">Show underlying select</button> </div><!-- End demo --> + + <div class="demo-description"> -<p> -A custom widget built by composition of Autocomplete and Button. You can either type something into the field to get filtered suggestions based on your input, or use the button to get the full list of selections. -</p> -<p> -The input is read from an existing select-element for progressive enhancement, passed to Autocomplete with a customized source-option. -</p> +<p>A custom widget built by composition of Autocomplete and Button. You can either type something into the field to get filtered suggestions based on your input, or use the button to get the full list of selections.</p> +<p>The input is read from an existing select-element for progressive enhancement, passed to Autocomplete with a customized source-option.</p> </div><!-- End demo-description --> </body> |