JQuery搜索框⾃动补全(模糊匹配)功能实现⽰例
本地实现了⼀个搜索框⾃动补全的⼩功能,在JQuery UI的autocomplete插件的基础上,加⼊了⾃⼰的业务代码,贴出来回顾⼀下,同时可以给⼤家⼀个参考
⾸先贴出的是JQuery Ui 的⾃动补全插件部分的代码,后⾯的功能都是在其基础上追加的,直接拷贝到你的本地就可以直观的看到运⾏效果,也可以到官⽹上⾯体验和查看,为了⽅便,我这⾥是直接引⼊的JS链接点击
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>jQuery UI Autocomplete - Default functionality</title>
<link rel="stylesheet" href="//code.jquery/ui/1.12.1/themes/base/jquery-ui.css" rel="external nofollow" rel="external nofollow" >
<link rel="stylesheet" href="/resources/demos/style.css" rel="external nofollow" >
<script src="code.jquery/jquery-1.12.4.js"></script>
<script src="code.jquery/ui/1.12.1/jquery-ui.js"></script>
<script>
$( function() {
var availableTags = [//这⾥要改成根据⽤户的输⼊,⾃动更换词库的形式
"ActionScript",
"AppleScript",
"Asp",
"BASIC",
"C",
"C++",
"Clojure",
"COBOL",
"ColdFusion",
"Erlang",
"Fortran",
"Groovy",
"Haskell",
"Java",
"JavaScript",
"Lisp",
"Perl",
"PHP",
"Python",
"Ruby",
"Scala",
"Scheme"
];
$( "#tags" ).autocomplete({//调⽤补全功能
source: availableTags
});
} );
</script>
</head>
<body>
<div class="ui-widget">
<label for="tags">Tags: </label>
<input id="tags">
</div>
</body>
</html>
运⾏截图
jquery-ui的⾃动补全功能截图
下⾯说下我追加的部分功能及实现思路,有可以改进的地⽅还请指教:
1、⾸先,数据源要根据⽤户输⼊的内容实时更新.
输⼊框的值随着⽤户的输⼊会⼀直变动.所以,输⼊框下⽅的推荐补全的内容要输⼊的值进⾏变动,这⾥使⽤onkeyup属性来监听键盘动作,并传递此时input的value值到js函数中.
//html
<input type="search" class="" id="tags" placeholder="搜索" required="" onkeyup="catch_keyword(this.value)">
//js代码
function catch_keyword(word) {//这⾥接受并log出value
console.log(word);
}
2、第2步,考虑到数据库中需要模糊检索的字段都是中⽂的菜品名称.所以,当⽤户输⼊字母的时候,进⾏了⼀下过滤,当输⼊的内容中存在字母时,不提交给后台处理
//字符串判断函数
//判断⼀个字符串是否混有字母,全中⽂返回true
function isChn(str) {
var reg = /^[\u4E00-\u9FA5]+$/;
if (!st(str)) {
return false;
} else {
return true;
}
}
3、发现当字符串中含有空格的时候,上⾯的字符串判断函数,返回的内容不符合预期,然后加⼊了⼀个去除字符串中所有空格的功能
//去掉字符串中任意位置的空格,返回去除空格后的字符串
function Trim(str, is_global) {
var result;
result = place(/(^\s+)|(\s+$)/g, "");
if (LowerCase() == "g") {
result = place(/\s/g, "");
}
return result;
}
4、处理结束⽤户的输⼊后,就是提交到后台,然后返回数据源了,也就是availableTags;这⾥我把availableTags声明为全局变量.并且⽤同步的Ajax⽅式取回数据,然后赋值给availableTags,然后在监听键盘的函数中,使⽤返回的数据调⽤⾃动补全功能.
//请求后端获取数据源
function get_source(word = null) {
var url = "<?php echo base_url('admin/Demo/source');?>?keyword=" + word;
$.get({
type: 'GET',
url: url,
async: false,//改为同步
dataType: 'json',
success: function (response) {
console.log('1');
availableTags = response;
}
});
}
这⾥更新下最开始的接收监听键盘后的value值的函数
//捕捉键⼊的关键字
function catch_keyword(word = null) {
if (isChn(Trim(word, 'g'))) {//去掉空格后检查字符串,如果符合,继续请求后台
get_source(word);
$("#tags").autocomplete({
source: availableTags //数据源
});
}
}
到这⾥,这个功能已经基本结束了,在测试过程中发现了⼀个⼩问题,每次第⼀次获取⽤户输⼊的时候,⾃动补全功能没有触发,在⽤户继续输⼊后,才触发成功,经过调试,我在页⾯加载完成后,初始化⼀下⾃动补全插件,解决了这个问题
6. 附:完整代码
不知道如何在markdown中添加下载链接,只好把完整代码放上来啦!
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title></title>
<link rel="stylesheet" href="/jquery-weui-build/dist/lib/weui.min.css" rel="external nofollow" >
<link rel="stylesheet" href="/jquery-weui-build/dist/css/jquery-weui.css" rel="external nofollow" >
<link rel="stylesheet" href="/jquery-weui-build/demos/css/demos.css" rel="external nofollow" >
<link rel="stylesheet" href="//code.jquery/ui/1.12.1/themes/base/jquery-ui.css" rel="external nofollow" rel="external nofollow" >
<script src="code.jquery/jquery-1.12.4.js"></script>
<script src="/static/jquery-weui-build/dist/lib/fastclick.js"></script>
<script src="code.jquery/ui/1.12.1/jquery-ui.js"></script>
<script>
$(function () {
FastClick.attach(document.body);
});
</script>
<script src="/jquery-weui-build/dist/js/jquery-weui.js"></script>
</head>
<body>
<div class="ui-widget">
<div class="weui-search-bar" id="searchBar">
<form class="weui-search-bar__form" action="#">
<div class="weui-search-bar__box">
<i class="weui-icon-search"></i>
<input type="search" class="weui-search-bar__input" id="tags" placeholder="搜索" required=""
onkeyup="catch_keyword(this.value)">
<a href="javascript:" rel="external nofollow" rel="external nofollow" class="weui-icon-clear" id="searchClear"></a>
</div>
<label class="weui-search-bar__label" id="searchText"
>
<i class="weui-icon-search"></i>
<span>搜索</span>
</label>
</form>
<a href="javascript:" rel="external nofollow" rel="external nofollow" class="weui-search-bar__cancel-btn" id="searchCancel">取消</a> </div>
</div>
<script>
var availableTags = [];//数据源
//先初始化⾃动补全功能
$("#tags").autocomplete({
source: availableTags //数据源
});
//去掉字符串中任意位置的空格
function Trim(str, is_global) {
var result;
result = place(/(^\s+)|(\s+$)/g, "");
if (LowerCase() == "g") {
result = place(/\s/g, "");
}
return result;
}
//判断字符串是否全是中⽂
function isChn(str) {
var reg = /^[\u4E00-\u9FA5]+$/;
if (!st(str)) {
return false;
} else {
return true;
}
}
//捕捉键⼊的关键字
function catch_keyword(word = null) {
if (isChn(Trim(word, 'g'))) {
get_source(word);
$("#tags").autocomplete({
source: availableTags //数据源
});
}
}
//请求后端获取数据源
function get_source(word = null) {
var url = "<?php echo base_url('admin/Demo/source');?>?keyword=" + word;
$.get({
type: 'GET',
url: url,
async: false,//改为同步
dataType: 'json',
success: function (response) {
console.log('1');
availableTags = response;
}
});
}
jquery自动轮播图代码</script>
</body>
</html>
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论