html搜索框自动补全,搜索框自动补全(模糊匹配)功能实现

本地实现了一个搜索框自动补全的小功能,在JQuery UI的autocomplete插件的基础上,加入了自己的业务代码,贴出来回顾一下,同时可以给大家一个参考

首先贴出的是JQuery Ui 的自动补全插件部分的代码,后面的功能都是在其基础上追加的,直接拷贝到你的本地就可以直观的看到运行效果,也可以到官网上面体验和查看,为了方便,我这里是直接引入的JS链接点击下载JQuery UI的源码

jQuery UI Autocomplete - Default functionality

$( 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

});

} );

Tags:

运行截图

18047be090f4?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

jquery-ui的自动补全功能截图

下面说下我追加的部分功能及实现思路,有可以改进的地方还请指教:

首先,数据源要根据用户输入的内容实时更新.

输入框的值随着用户的输入会一直变动.所以,输入框下方的推荐补全的内容要输入的值进行变动,这里使用onkeyup属性来监听键盘动作,并传递此时input的value值到js函数中.

//html

//js代码

function catch_keyword(word) {//这里接受并log出value

console.log(word);

}

第2步,考虑到数据库中需要模糊检索的字段都是中文的菜品名称.所以,当用户输入字母的时候,进行了一下过滤,当输入的内容中存在字母时,不提交给后台处理

//字符串判断函数

//判断一个字符串是否混有字母,全中文返回true

function isChn(str) {

var reg = /^[\u4E00-\u9FA5]+$/;

if (!reg.test(str)) {

return false;

} else {

return true;

}

}

发现当字符串中含有空格的时候,上面的字符串判断函数,返回的内容不符合预期,然后加入了一个去除字符串中所有空格的功能

//去掉字符串中任意位置的空格,返回去除空格后的字符串

function Trim(str, is_global) {

var result;

result = str.replace(/(^\s+)|(\s+$)/g, "");

if (is_global.toLowerCase() == "g") {

result = result.replace(/\s/g, "");

}

return result;

}

处理结束用户的输入后,就是提交到后台,然后返回数据源了,也就是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中添加下载链接,只好把完整代码放上来啦!

$(function () {

FastClick.attach(document.body);

});

var availableTags = [];//数据源

//先初始化自动补全功能

$("#tags").autocomplete({

source: availableTags //数据源

});

//去掉字符串中任意位置的空格

function Trim(str, is_global) {

var result;

result = str.replace(/(^\s+)|(\s+$)/g, "");

if (is_global.toLowerCase() == "g") {

result = result.replace(/\s/g, "");

}

return result;

}

//判断字符串是否全是中文

function isChn(str) {

var reg = /^[\u4E00-\u9FA5]+$/;

if (!reg.test(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;

}

});

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值