mirror of
https://github.com/jquery/jquery-ui.git
synced 2024-11-21 11:04:24 +00:00
1f2cfb942f
As noted in the ticket, it's probably better to default to unstyled items to prevent problems. Users can still implement their own rendering method as shown in the custom data and display demo.
144 lines
4.7 KiB
HTML
144 lines
4.7 KiB
HTML
<!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>
|
|
<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; }
|
|
</style>
|
|
<script type="text/javascript">
|
|
(function($) {
|
|
$.widget("ui.combobox", {
|
|
_create: function() {
|
|
var self = this;
|
|
var select = this.element.hide();
|
|
var input = $("<input>")
|
|
.insertAfter(select)
|
|
.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)))
|
|
return {
|
|
id: this.value,
|
|
label: text.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + $.ui.autocomplete.escapeRegex(request.term) + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<strong>$1</strong>"),
|
|
value: text
|
|
};
|
|
}));
|
|
},
|
|
delay: 0,
|
|
change: function(event, ui) {
|
|
if (!ui.item) {
|
|
// remove invalid value, as it didn't match anything
|
|
$(this).val("");
|
|
return false;
|
|
}
|
|
select.val(ui.item.id);
|
|
self._trigger("selected", event, {
|
|
item: select.find("[value='" + ui.item.id + "']")
|
|
});
|
|
|
|
},
|
|
minLength: 0
|
|
})
|
|
.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 );
|
|
};
|
|
$("<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();
|
|
});
|
|
}
|
|
});
|
|
|
|
})(jQuery);
|
|
|
|
$(function() {
|
|
$("#combobox").combobox();
|
|
$("#toggle").click(function() {
|
|
$("#combobox").toggle();
|
|
});
|
|
});
|
|
</script>
|
|
</head>
|
|
<body>
|
|
|
|
<div class="demo">
|
|
|
|
<div class="ui-widget">
|
|
<label>Your preferred programming language: </label>
|
|
<select id="combobox">
|
|
<option value="">Select one...</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>
|
|
</div><!-- End demo-description -->
|
|
|
|
</body>
|
|
</html>
|