引用插件:autocomplete.js
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<link rel="stylesheet" href="checkbox.css">
<script src="https://cdn.bootcss.com/jquery/1.10.2/jquery.min.js"></script>
<script src="dist/autocomplete.js"></script> <!-- 输入联想插件 -->
<style>
*{
padding:0;margin:0;
}
.wrapper {
width: 750px;
margin: 0 auto;
}
#message {
margin-top: 40px;
margin-bottom: 50px;
font-size: 20px;
text-align: center;
}
</style>
<body>
<div class="outbox" style="margin-bottom: 60px;">
<!-- 输入联想功能 -->
<div id="demo">
<div class="wrapper">
<div id="search-form"></div>
<div id="message"></div>
</div>
</div>
</div>
<script type="text/javascript">
var proposals = ['输入联想测试一', '输入联想测试二', '输入联想测试三', '输入联想测试四', '输入联想测试五'];
jQuery(document).ready(function(){
jQuery('#search-form').autocomplete({
hints: proposals,
width: 300,
height: 30,
onSubmit: function(text){
jQuery('#message').html('Selected: <b>' + text + '</b>');
}
});
});
</script>
</body>
插件代码:
/**
A jQuery plugin for search hints
Author: Lorenzo Cioni - https://github.com/lorecioni
*/
(function($) {
$.fn.autocomplete = function(params) {
//Selections
var currentSelection = -1;
var currentProposals = [];
//Default parameters
params = $.extend({
hints: [],
placeholder: 'Search',
width: 200,
height: 16,
showButton: true,
buttonText: 'Search',
onSubmit: function(text){},
onBlur: function(){}
}, params);
//Build messagess
this.each(function() {
//Container
var searchContainer = $('<div></div>')
.addClass('autocomplete-container')
.css('height', params.height * 2);
//Text input
var input = $('<input type="text" autocomplete="off" name="query">')
.attr('placeholder', params.placeholder)
.addClass('autocomplete-input')
.css({
'width' : params.width,
'height' : params.height
});
if(params.showButton){
input.css('border-radius', '3px 0 0 3px');
}
//Proposals
var proposals = $('<div></div>')
.addClass('proposal-box')
.css('width', params.width + 18)
.css('top', input.height() + 20);
var proposalList = $('<ul></ul>')
.addClass('proposal-list');
proposals.append(proposalList);
input.keydown(function(e) {
switch(e.which) {
case 38: // Up arrow
e.preventDefault();
$('ul.proposal-list li').removeClass('selected');
if((currentSelection - 1) >= 0){
currentSelection--;
$( "ul.proposal-list li:eq(" + currentSelection + ")" )
.addClass('selected');
} else {
currentSelection = -1;
}
break;
case 40: // Down arrow
e.preventDefault();
if((currentSelection + 1) < currentProposals.length){
$('ul.proposal-list li').removeClass('selected');
currentSelection++;
$( "ul.proposal-list li:eq(" + currentSelection + ")" )
.addClass('selected');
}
break;
case 13: // Enter
if(currentSelection > -1){
var text = $( "ul.proposal-list li:eq(" + currentSelection + ")" ).html();
input.val(text);
}
currentSelection = -1;
proposalList.empty();
params.onSubmit(input.val());
break;
case 27: // Esc button
currentSelection = -1;
proposalList.empty();
input.val('');
break;
}
});
input.bind("change paste keyup", function(e){
if(e.which != 13 && e.which != 27
&& e.which != 38 && e.which != 40){
currentProposals = [];
currentSelection = -1;
proposalList.empty();
if(input.val() != ''){
var word = "^" + input.val() + ".*";
proposalList.empty();
for(var test in params.hints){
if(params.hints[test].match(word)){
currentProposals.push(params.hints[test]);
var element = $('<li></li>')
.html(params.hints[test])
.addClass('proposal')
.click(function(){
input.val($(this).html());
proposalList.empty();
params.onSubmit(input.val());
})
.mouseenter(function() {
$(this).addClass('selected');
})
.mouseleave(function() {
$(this).removeClass('selected');
});
proposalList.append(element);
}
}
}
}
});
input.blur(function(e){
currentSelection = -1;
//proposalList.empty();
params.onBlur();
});
searchContainer.append(input);
searchContainer.append(proposals);
if(params.showButton){
//Search button
var button = $('<div></div>')
.addClass('autocomplete-button')
.html(params.buttonText)
.css({
'height': params.height + 2,
'line-height': params.height + 2 + 'px'
})
.click(function(){
proposalList.empty();
params.onSubmit(input.val());
});
searchContainer.append(button);
}
$(this).append(searchContainer);
if(params.showButton){
//Width fix
searchContainer.css('width', params.width + button.width() + 50);
}
});
return this;
};
})(jQuery);