js实现输入框联想搜索
实现点击和输入搜索联想,把搜索出的列表放到下面的ul列表中,然后再列表中选择并把公司名赋值给输入框,把guid赋值给隐藏域
html
<input type="hidden" name="CompanyGuid" value="" id="CompanyGuid"/>
<div class="form-group clearfix">
<label for="inline" class="inline fl">公司名称:</label>
<div class="autoSupRelative fl">
<input type="text" class="input" name="CompanyName" id="CompanyName" autocomplete="off">
<ul class="autoSupAbsolute"></ul>
</div>
</div>
css样式
.autoSupRelative{position: relative;padding:;float:left;z-index:;}
.autoSupAbsolute{position: absolute;left:;top:30px;background: #ffffff;border:1px solid #ccc;width:100%;max-height:240px;overflow-y: auto;margin:;padding:;box-shadow: 0px 2px 2px #ccc;display: none}
.autoSupAbsolute li{ list-style: none;cursor: pointer;padding: 5px;line-height: 22px;font-size: 12px;}
.autoSupAbsolute li:hover{background: #2dc3e8;color: #ffffff;}
js
//模糊查询
function SearchLike(jsons) {
//var timerSerch = null;
$(document).on('keyup', '[name=' + jsons.name + ']', function () {
var This = this;
this.timerSerch = setTimeout(function () {//如果一直输入,就先不查询,等键抬起500毫秒之后再进行查询。
getSearchValue({
This: This,
Event: "keyup",
url: jsons.url,
fun: jsons.fun
});
}, 500);
$(this).parents('.autoSupRelative').find('.autoSupAbsolute').show();
});
$(document).on('keydown', '[name=' + jsons.name + ']', function () {
var _this = this;
clearTimeout(_this.timerSerch); });
$(document).on('click', '.autoSupAbsolute li', function (e) {
var name = $(this).parents('.autoSupRelative').find('input[type=text]').attr('name');
if (name == jsons.name) {
var thisHtml = $(this).attr('companyName');//.replace('<span style="display: none; width: 0px; height: 0px;" id="transmark"></span>', '');//.split('<span')[0];
// thisHtml = thisHtml.split(',')[0];
if (jsons.HideName) {
$(this).parents('.autoSupRelative').find('[name=' + jsons.HideName + ']').val($(this).attr("PK_Guid"));
}
if (thisHtml) {
$(this).parents('.autoSupRelative').find('[name=' + jsons.name + ']').val(thisHtml);
}
if (jsons.fun1) {
jsons.fun1(this);
}
$(this).parents('.autoSupRelative').find('[name=' + jsons.name + ']').siblings('ul').html('');
$(this).parents('.autoSupAbsolute').hide();
}
}); // $('[name=' + jsons.name + ']').on('click', function (e) {
$(document).on('click', '[name=' + jsons.name + ']', function (e) { e.stopPropagation();
var This = this;
$('.autoSupRelative').css({ 'zIndex': '99' });
$(this).parents('.autoSupRelative').css({ 'zIndex': '100' });
$(this).parents('.autoSupRelative').find('.autoSupAbsolute').show();
// if ($(this).parents('.autoSupRelative').find('ul li').length ==0) {//如果没有输入字段,就不重新检索
$(this).parents('.autoSupRelative').find('ul').html('<div style="padding:0 10px;">数据加载,请稍后....</div>');
getSearchValue({
This: This,
Event: "click",
url: jsons.url,
fun: jsons.fun
});
// }
}).on("blur", function () {
$('.autoSupRelative').css({ 'zIndex': '' });
});
$(document).on('click', function (e) {
$('.autoSupAbsolute').hide();
}); function getSearchValue(json) {
if (jsons.setUrl) {
//jsons.setUrl();
json.url = jsons.setUrl();
}
$.ajaxSetup({ cache: false });
$.ajax(
{
type: "GET",//POST
url: json.url + encodeURIComponent($(json.This).val()),
success: function (msg) {
var htmlInit = '';
//if (msg != "") {
msg = JSON.stringify(msg)
msg = msg.replace(/'/g, '"');//把单引号替换成双引号
//var datas = jQuery.parseJSON(msg);
var datas = []
datas = jQuery.parseJSON(msg).result;
var html = '';
if (json.Event == 'click') {
if (datas.length == 0) {
$(json.This).next().val('');//清除隐藏域的赋值
htmlInit = '<div style="text-align:center">未找到此项....</div>';
} else {
for (var i = 0; i < datas.length; i++) {
if (json.fun) {
htmlInit += json.fun(datas[i]);
} else {
htmlInit += '<li PK_Guid="' + datas[i].companyGuid + '"companyName="' + datas[i].companyName + '">' + datas[i].companyName + '</li>';
}
}
}
$(json.This).parents('.autoSupRelative').find('.autoSupAbsolute').html(htmlInit);
$(json.This).parents('.autoSupRelative').find('.autoSupAbsolute').show();
}
if (json.Event == 'keyup') {
if ($(json.This).val() == '') {
$(json.This).parents('.autoSupRelative').find('ul').html('');
$(json.This).parents('.autoSupRelative').find('.autoSupAbsolute').hide();
} else {
if (datas.length == 0) {
$(json.This).next().val('');//清除隐藏域的赋值
html = '<div style="text-align:center">未找到此项....</div>';
} else {
for (var i = 0; i < datas.length; i++) {
if (json.fun) {
html += json.fun(datas[i]);
} else {
html += '<li PK_Guid="' + datas[i].companyGuid + '" companyName="' + datas[i].companyName + '">' + datas[i].companyName + '</li>';
}
}
}
$(json.This).parents('.autoSupRelative').find('.autoSupAbsolute').html(html);
}
}
// }
},
error: function () {
$(json.This).parents('.autoSupRelative').find('ul').html('<div style="padding:10px;">数据加载失败....</div>');
}
}
);
}
} // 使用--点击输入框,请求接口--url是联想搜索接口,companyName没有值的时候显示所有的列表--下拉列表选择把姓名和id复制给input
SearchLike({
name: 'CompanyName', url: '/CompanyCustomBill/CompanySimpInfo?companyName=', fun1: function (_this) {
$("#CompanyName").val($(_this).attr('companyName'));
$("[name=CompanyGuid]").val($(_this).attr('PK_Guid'));
}
});
js实现输入框联想搜索的更多相关文章
- input输入框联想功能
一直想找一个可以连接后台,可以根据后台内容的input输入框,可以实现联想功能,网上找到一个简单的静态页面的输入框联想,经过一番修改之后终于可以实现读取自己定义的数组的联想了,其实也比较简单就是格式的 ...
- js jq输入框中按回车触发提交事件,用户在页面输入后按回车(Enter键)进行
js jq输入框中按回车触发提交事件,用户在页面输入后按回车(Enter键)进行 代码如下: <!DOCTYPE html> <html lang="en" xm ...
- js限制输入框只能输入数字
分享下js限制输入框中只能输入数字的方法,包括整数与小数,分享几个例子,有需要的朋友参考下. 1.使用正则表达式限制输入框只能输入数字: <input type="text" ...
- JS常用正则表达式和JS控制输入框输入限制(数字、汉字、字符)
验证数字:^[0-9]*$验证n位的数字:^\d{n}$验证至少n位数字:^\d{n,}$验证m-n位的数字:^\d{m,n}$验证零和非零开头的数字:^(0|[1-9][0-9]*)$验证有两位小数 ...
- JS 文本输入框放大镜效果
JS 文本输入框放大镜效果 今天下午研究了下 "文本输入框放大镜效果" 当然KISSY官网也有这种组件 请看kissy demo 其实这种效果 对于很多童鞋来说 应该并不陌生!我今 ...
- JS判断输入框值是否为空
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- [大数据]-Elasticsearch5.3.1 IK分词,同义词/联想搜索设置
--题外话:最近发现了一些问题,一些高搜索量的东西相当一部分没有价值.发现大部分是一些问题的错误日志.而我是个比较爱贴图的.搜索引擎的检索会将我们的博文文本分词.所以图片内容一般是检索不到的,也就是说 ...
- js格式化输入框内金额、银行卡号[转]
这篇文章主要介绍了js格式化输入框内金额.银行卡号,采用“keyup”事件处理格式化,每4位数一组中间空格隔开,如何格式化输入框内金额.银行卡号,需要了解的朋友可以参考一下 我们在项目中经常遇到需要格 ...
- Elasticsearch5.3.1 IK分词,同义词/联想搜索设置
[大数据]-Elasticsearch5.3.1 IK分词,同义词/联想搜索设置 原文地址:http://www.cnblogs.com/NextNight/p/6837407.html --题外话 ...
随机推荐
- 如何实现php异步处理
在实际生成环境下,php作为后台的接口服务器已经很常见,php当然具有它能作为后台服务器的优势之处,但是,在处理一些客户端并不关心的结果时,就显出它的弊端了---没有异步执行的机制.就比如我们想做一些 ...
- ubuntu学习教程
1:搜狗输入法安装: http://jingyan.baidu.com/article/adc815134f4b92f722bf7350.html 2:flash插件的安装: http://jingy ...
- for循环中 i++和++i 是否有区别?
正常情况下 i++和++i是有区别的: 前者是:先引用,后增加, 后者是:先增加,后引用, 但是在for循环中: for(var i=0;i<10;i++){ System.out.print ...
- How To run OAI eNB (No S1) with USRP X310(1)
How To run OAI eNB (No S1) with USRP X310 1.Things need to be done 1.1 Install Ubuntu 14.04 1.1.1 In ...
- android自定义控件(1)-自定义控件属性
那么还是针对我们之前写的自定义控件:开关按钮为例来说,在之前的基础上,我们来看看有哪些属性是可以自定义的:按钮的背景图片,按钮的滑块图片,和按钮的状态(是开还是关),实际上都应该是可以在xml文件中直 ...
- matlab保存画框图像去白边
在matlab图像处理中,为了标识出图像的目标区域来,需要利用plot函数或者rectangle函数,这样标识目标后,就保存图像. 一般saves保存的图像存在白边,可以采用imwrite对图像进行保 ...
- java学习之实例变量初始化
实例变量的初始化方法 第一种:通过构造函数进行初始化. 第二种:通过声明实例字段初始化. 第三种:通过对象代码块初始化. 通过构造函数进行初始化方法 通过构造函数进行对象初始化,必须在类中声明一个带参 ...
- std::string与output-operator"<<"的兼容问题
经查阅资料得知,“在某些编译器下std::string,需要使用c_str()才能作为output-operator "<<" 的参数” std::string tit ...
- Windows Phone 解析手机型号DeviceStatus.DeviceName
问题的产生 在WP开发过程中难免遇到统计等相关的数据回收,那么当使用DeviceStatus.DeviceName这个来获取设备的名称时经常会得到类似下面的设备信息: 可以看出这样的数据很不直 ...
- 使用Navicat连接阿里云服务器上的MySQL数据库=======Linux 开放 /etc/hosts.allow
使用Navicat连接阿里云服务器上的MySQL数据库 1.首先打开Navicat,文件>新建连接> 2,两张连接方法 1>常规中输入数据库的主机名,端口,用户名,密码 这种直接 ...