<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script src='../node_modules/jquery/dist/jquery.min.js'></script>
<style>
html,
body {
font-family: Arial, 'microsoft Yahei';
}
ul,
li {
list-style: none;
margin: 0;
padding: 0;
}
.znTipsBox {
position: relative;
}
input.znTips {
width: 120px;
height: 23px;
line-height: 23px;
border-radius: 3px;
border: 1px solid #ccc;
padding: 3px 12px;
}
input.znTips:focus~ul {
display: block;
}
.znTipsBox ul {
position: absolute;
left: 0;
top: 31px;
width: 100%;
border: 1px solid #ccc;
display: none;
}
.znTipsBox ul li {
padding: 3px 12px;
font-size: 12px;
line-height: 23px;
height: 23px;
}
.znTipsBox ul li:hover {
background-color: #eab;
cursor: pointer;
}
.znTipsBox.noResult ul li:hover {
background-color: #fff;
}
.znTipsBox.noResult ul li {
color: #000;
text-align: center;
}
.znTipsBox ul li .seclecText {
color: red;
}
</style>
</head>
<body>
<div class="znTipsBox">
<input type="text" class="znTips zn1" placeholder="请输入">
</div>
<br>
<br>
<br>
<br>
<br>
<br>
<div class="znTipsBox">
<input type="text" class="znTips zn1" placeholder="请输入">
</div>
<br>
<br>
<br>
<br>
<br>
<br>
<div class="znTipsBox">
<input type="text" class="znTips zn2" placeholder="请输入">
</div>
<script src='index.js'></script>
</body>
</html>
(function($) {
$.fn.inpTips_zd = function(opts) {
/*
功能:搜索提示,延时搜索
dom为input的class,不同数据库或者不同字段用不同的class
noresultText为默认的无搜索结果提示
ajax_request为获取后台数据的方法,需要自己按这个结构
{
"code": 200,
"data": [
{"name": "王五"}
{"name": "王五1"}
]
}
res.code如果不等200或者数据读取失败则返回:
callback(false, '这里写错误信息');
仿自:动脑学院
*/
//默认参数
var defaults = {
dom: '.zn1',
noresultText: '没有搜索结果',
ajax_request: function(callback) {
$.ajax({
url: 'data.json',
type: 'GET',
dataType: 'JSON',
success: function(res) {
if (res.code === 200) {
console.log(res.data)
callback(res.data);
} else {
callback(false, '这里写错误信息');
}
},
})
.fail(function(erro) {
callback(false, '这里写错误信息');
});
}
}
//如果有设置值则引用设置值否则默认
this.options = $.extend({}, defaults, opts);
if (!$(this.options.dom).length) return false;
//声明公用变量名
var $dom = $(this.options.dom),
dom = this.options.dom,
count = 1,
maxTime = 2,
parentBox = '.znTipsBox',
noresultText = this.options.noresultText,
ajax_request = this.options.ajax_request,
time = setInterval(function() {
count++;
}, 1000);
$dom.on('input', function() {
var searchInp = $(this).val();
var html = '',
ulClass = dom + '_ul',
self = this;
ulClass = ulClass.substr(ulClass.indexOf('.') + 1);
clear();
time = setInterval(function() {
count++;
if (count >= maxTime) {
clear();
if ($('.' + ulClass).length) $('.' + ulClass).remove();
ajax_request(function(data) {
if (arguments[0] === false) {
if (arguments.length > 1) {
$(self).parent(parentBox).addClass('noResult').append('<ul class="' + ulClass + '"><li>' + arguments[1] + '</li></ul>');
} else {
$(self).parent(parentBox).addClass('noResult').append('<ul class="' + ulClass + '"><li>' + noresultText + '</li></ul>');
}
return false;
}
$.each(data, function(index, el) {
html += '<li>' + el.name + '</li>';
});
$(self).parent(parentBox).removeClass('noResult').append('<ul class="' + ulClass + '">' + html + '</ul>');
$(self).parent(parentBox).on('mouseover', 'li', function(e) {
$(self).val(this.innerHTML);
})
if (!$(self).val()) {
$('.' + ulClass).remove();
html = '';
}
});
}
}, 1000)
if ($(self).val()) {
$('.' + ulClass).remove();
html = '';
}
});
//清除计时器
function clear() {
clearTimeout(time);
count = 1;
}
clear();
}
$(document).inpTips_zd();
}(jQuery));
// 例子如下
/*
<div class="znTipsBox">
<input type="text" class="znTips zn2" placeholder="请输入">
</div>
*/
$(document).inpTips_zd({
dom: '.zn2',
noresultText: '没有搜索结果',
ajax_request: function(callback) {
$.ajax({
url: 'data1.json',
type: 'GET',
dataType: 'JSON',
success: function(res) {
if (res.code === 200) {
callback(res.data);
} else {
callback(false, '这里写错误信息');
}
},
})
.fail(function(erro) {
callback(false, '这里写错误信息');
});
}
});
{
"code": 200,
"data": [
{
"id":1,
"name": "王五"
},
{
"id":2,
"name": "王五1"
},
{
"id":3,
"name": "王五2"
}
]
}