web/static/css/jq-css/demos/autocomplete/remote-with-cache.html
author ymh <ymh.work@gmail.com>
Mon, 12 Jul 2010 18:23:35 +0200
changeset 9 6014b4b0ad53
permissions -rw-r--r--
update player - jq-css
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
<!DOCTYPE html>
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
<html lang="en">
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
<head>
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
	<meta charset="UTF-8" />
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
	<title>jQuery UI Autocomplete Remote with caching demo</title>
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
	<link type="text/css" href="../../themes/base/jquery.ui.all.css" rel="stylesheet" />
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
	<script type="text/javascript" src="../../jquery-1.4.2.js"></script>
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
	<script type="text/javascript" src="../../ui/jquery.ui.core.js"></script>
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
	<script type="text/javascript" src="../../ui/jquery.ui.widget.js"></script>
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
	<script type="text/javascript" src="../../ui/jquery.ui.position.js"></script>
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
	<script type="text/javascript" src="../../ui/jquery.ui.autocomplete.js"></script>
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
	<link type="text/css" href="../demos.css" rel="stylesheet" />
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
	<script type="text/javascript">
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
	$(function() {
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
		function log(message) {
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
			$("<div/>").text(message).prependTo("#log");
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
			$("#log").attr("scrollTop", 0);
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
		}
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
		
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
		var cache = {};
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
		$("#birds").autocomplete({
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
			source: function(request, response) {
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
				if (cache.term == request.term && cache.content) {
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
					response(cache.content);
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
					return;
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
				}
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
				if (new RegExp(cache.term).test(request.term) && cache.content && cache.content.length < 13) {
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
					response($.ui.autocomplete.filter(cache.content, request.term));
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
					return;
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
				}
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
				$.ajax({
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
					url: "search.php",
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
					dataType: "json",
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
					data: request,
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
					success: function(data) {
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
						cache.term = request.term;
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
						cache.content = data;
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
						response(data);
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
					}
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
				});
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
			},
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
			minLength: 2,
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
			select: function(event, ui) {
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
				log(ui.item ? ("Selected: " + ui.item.value + " aka " + ui.item.id) : "Nothing selected, input was " + this.value);
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
			}
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
		});
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
	});
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
	</script>
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
</head>
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
<body>
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
<div class="demo">
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
<div class="ui-widget">
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
	<label for="birds">Birds: </label>
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
	<input id="birds" />
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
</div>
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
<div class="ui-widget" style="margin-top:2em; font-family:Arial">
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
	Result:
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
	<div id="log" style="height: 200px; width: 300px; overflow: auto;" class="ui-widget-content"></div>
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
</div>
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
</div><!-- End demo -->
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
<div class="demo-description">
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
<p>
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
The Autocomplete widgets provides suggestions while you type into the field. Here the suggestions are bird names, displayed when at least two characters are entered into the field.
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
</p>
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
<p>
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
Similar to the remote datasource demo, though this adds some local caching to improve performance. The cache here saves just one query, and could be extended to cache multiple values, one for each term.
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
</p>
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
</div><!-- End demo-description -->
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
</body>
6014b4b0ad53 update player - jq-css
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
</html>