需求:类似于百度的搜索框,可配置,可单列可table格式,可填充数据.页面可多次使用,简单,易用.

想法:使用jquery,css,ajax,前台调用,后台返回json数据.

jquery代码:

var highLightIndex = -1; var list;
var trBgHover, trBgKey;
var define = {
processKeyup: function (event) {
var id = $(this).attr("id");
var keyCode = event.keyCode;
if (keyCode == 13) {
if (highLightIndex != -1) {
var gid = $('#searchTable').find('tr:gt(0)').eq(highLightIndex).attr('gid');
define.bindData(gid, id, $('#searchTable').find('tr:gt(0)').eq(highLightIndex).children('td:first').text());
$(this).next('.tip').remove();
highLightIndex != -1;
}
}
else if (keyCode == 38 || keyCode == 40) {
var words = $('#searchTable').find('tr:gt(0)');
var num = words.length;
if (num <= 0) return;
if (highLightIndex != -1) {
words.eq(highLightIndex).css('background-color', trBgKey);
}
highLightIndex = ((keyCode != 38 ? num + 1 : num - 1) + highLightIndex) % num;
trBgKey = words.eq(highLightIndex).css('background-color');
words.eq(highLightIndex).css('background-color', '#e1eff4');
$('#' + $(this).attr("id")).val(words.eq(highLightIndex).find("td").get(0).innerHTML);
}
else {

if ($(this).next('.tip').length == 0) {
var tmpLeft = $(this).offset().left;
$(this).after('<div class="tip"></div>');
$(this).next('.tip').css({ 'left': tmpLeft, 'top': $(this).offset().top + 20 });
}
var source = $(this).val();
if (source == "") {
$(this).next('.tip').remove();
}
var url = $(this).attr("url");
var domain = $(this).attr("domain");
var opers = $(this).attr("oper");
$.ajax({
type: "get",
async: false,
dataType: "text",
cache: false,
data: "oper=" + opers + "&tj=" + source + "&domain=" + domain,
url: url,
success: function (d) {
list = d;
}
});
list = eval(list);

if (list.length == 0) {
$(this).next('.tip').remove();
var idlist = $(this).attr("hidId");
var tmp = idlist.split('&');
for (var i = 0; i < tmp.length; i++) {
$("#" + tmp[i]).val('');
}
}
$(this).next('.tip').empty();
var objid = $(this).attr('id');
var znRow = $(this).attr('cnrowbind');
var tmp10 = znRow.split(',');
$(this).next('.tip').append("<table id='searchTable'><thead><tr></tr></thead></table>");
for (var i = 0; i < tmp10.length; i++) {
$('#searchTable thead tr').append("<th>" + tmp10[i] + "</th>");
}
var thLength = $('#searchTable').find('th').length;
if (thLength == 1) $('#searchTable').find('th').parent('tr').hide();
var enRow = $(this).attr('enrowbind');
var tmp11 = enRow.split(',');
for (var i = 0; i < list.length; i++) {
$(this).next('.tip').children('table').append("<tr index = " + i + " id='tmp' gid='" + list[i][tmp11[0]] + "' onclick = 'define.bindData(\"" + list[i][tmp11[0]] + "\",\"" + objid + "\",\"" + list[i][tmp11[1]] + "\",this)'></tr>");
for (var j = 1; j < tmp11.length; j++) {
$('#tmp').append("<td>" + list[i][tmp11[j]] + "</td>");
}
$('#searchTable tr').removeAttr('id');
}
$('#searchTable tr:odd').css('background-color', '#FFF');
$('#searchTable tr:even').css('background-color', '#F1F1F1');
$('#searchTable tr').hover(function () {
trBgHover = $(this).css('background-color');
$(this).css('background-color', '#e1eff4');
}, function () {
$(this).css('background-color', trBgHover);
});
}
},
bindData: function (obj, id, tmp, obj) {
$("#" + id).next('.tip').remove();
$("#" + id).val(tmp);
var idlist = $("#" + id).attr("hidId");
var tmp = idlist.split('&');

var listlist = list[highLightIndex];
if (listlist == undefined) {
listlist = list[$(obj).attr('index')];
}
var tmp12 = $("#" + id).attr('enrowbind');
var tmp13 = tmp12.split(',');
for (var i = 0; i < tmp.length; i++) {
$("#" + tmp[i]).val(listlist[tmp13[i + 1]]);
}
}
};

css代码:

.tip
{
width: auto;
height: auto;
min-width: 138px;
max-height: 260px;
overflow: auto;
position: absolute;
box-shadow: 1px 1px 3px #a5a5a5;
}

#searchTable
{
width: 100%;
+width:auto;
border-top: 1px solid #d0d0d0;
border-bottom: 1px solid #d0d0d0;
border-collapse: collapse;
}

#searchTable tr
{
height: 26px;
}

#searchTable th, #searchTable td
{
border: 1px solid #d0d0d0;
font-size: 13px;
}

#searchTable th
{
background-color: #F1F1F1;
}

.time
{
border: 1px solid #c9c9c9;
width: 140px;
}

页面调用以及后台访问的ashx写法:

<link href="../../Css/definecss.css" rel="stylesheet" />
<script src="../../Scripts/define.js" type="text/javascript"></script>

引用.

<script type="text/javascript">
$(function () {
$("#<%= txtCostCentreId1.ClientID%>").bind("keyup", define.processKeyup);
绑定
$("#<%= txtCostCentreId1.ClientID%>").keypress(function (event) {
if (event.keyCode == 13) {
event.preventDefault();
}
});
不会让页面enter和控件enter冲突
$('*').click(function () {
var flag = $(this).is('.tip');
if (!flag) $('.tip').remove();
});
})

点击其他地方 divremove
document.onkeydown = function (event) {
if (event.keyCode == 13) {
if (event.srcElement.tagName.toLowerCase() == "input")
event.returnValue = false;
}
}不会让页面enter和控件enter冲突
</script>

<asp:TextBox ID="txtCostCentreId1" runat="server" CssClass="time" url="../../UserControl/Search/Bindajax.ashx"
oper="CostCenter" domain="y301" cnrowbind="成本中心编号" enrowbind="CostCenterId,CostCenterId" autocomplete="off"
hidid="ctl00_ctl00_masterMain_masterMain_txtCostCentreId1" />

控件配置 url访问的ashx地址 oper类别 domain 当前公司编号(我的是后台写的)txtCostCentreId1.Attributes["domain"] = tmp; cnrowbind显示的中文列 可以多列(参考红色)

enrowbind对应的英文列 必须和json里面的一样 hidid 是数据向那些控件填充

中文列( 如果是3列就配置3列 )英文列第2列对应中文第一列 英文列第一列作为唯一编号列

如果你配置了2列中文列 hidid里面最多可向2个控件填充值 把查询的值 填充到你指定的id

<asp:TextBox ID="txtApplyGroup" runat="server" CssClass="time" url="../../../UserControl/Search/Bindajax.ashx"
oper="Workgroupall" domain="" cnrowbind="部门编号,申请成本中心,申请仓库"
enrowbind="WorkgroupId,WorkgroupId,CostCenterName,StorehouseName" autocomplete="off"
hidid="ctl00_ctl00_masterMain_masterMain_txtApplyGroup&ctl00_ctl00_masterMain_masterMain_txtApplyCostCentre&ctl00_ctl00_masterMain_masterMain_txtApplyStorehouseId"></asp:TextBox>

ashx代码:

获取条件,去查询数据,返回json就行了

public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
string oper = context.Request.QueryString["oper"];
string tj = context.Request.QueryString["tj"];
string orgdomain = context.Request.QueryString["domain"];
DataTable dt;
string message = "";
if (oper == "Workgroup")
{
dt = KernelManager.GetTableWorkgroup(orgdomain, tj);
message = dt.Rows.Count > 0 ? JsonHelper.ToJson(dt) : "";
}
else if (oper == "Material")
{
dt = MasterDataManager.GetTableMaterialInfo(orgdomain, tj);
message = dt.Rows.Count > 0 ? JsonHelper.ToJson(dt) : "";
}

下面是项目中的展示图片.兼容还不错

分享一个jquery写的类似于百度的搜索框,(可动态配置,可单列或者table格式,可填充数据)的更多相关文章

  1. 分享一个自己写的MVC+EF “增删改查” 无刷新分页程序

    分享一个自己写的MVC+EF “增删改查” 无刷新分页程序 一.项目之前得添加几个组件artDialog.MVCPager.kindeditor-4.0.先上几个效果图.      1.首先建立一个数 ...

  2. 分享一个c#写的开源分布式消息队列equeue

    分享一个c#写的开源分布式消息队列equeue 前言 equeue消息队列中的专业术语 Topic Queue Producer Consumer Consumer Group Broker 集群消费 ...

  3. Jquery实现类似百度的搜索框

    最近工作中需要做一个搜索框,类似百度的搜索框,需要达到两个功能: 1.输入关键字,展示匹配的下拉列表 2.选择匹配的项后查出相关内容 一般电商网站中也经常用到该搜索条,首先分析功能实现,输入关键字马上 ...

  4. ajax+JQuery实现类似百度智能搜索框

    最近再学习ajax,上课老师让我们实现一个类似百度首页实现搜索框的功能,刚开始做的时候没有一点头绪,查阅大量网上的资源后,发现之前的与我们现在的有些区别,所以在此写出来,希望能对大家有所帮助. 下面先 ...

  5. 雷林鹏分享:jQuery EasyUI 表单 - 格式化下拉框

    jQuery EasyUI 表单 - 格式化下拉框 本教程向您展示如何创建一个简单的下拉框(Combobox),让它在下拉框中显示图片项.您可以在下拉框(combobox)上使用 formatter ...

  6. js 百度云搜索框

    // ==UserScript==// @name 百度云插件+APIKey// @namespace // @version 5.0.2.1// @description 在百度云网盘的页面添加一个 ...

  7. 【好程序员笔记分享】——iOS开发之使用TextField作为搜索框

    -iOS培训,iOS学习-------型技术博客.期待与您交流!------------ iOS开发之使用TextField作为搜索框     今天给大家带来一个新的技巧,比如平时我们要使用代码创建一 ...

  8. 分享一个自己写的基于JQuery的一个Web背景切换的Demo

    这个效果主要有两个特点: 1. 背景切换的渐变 2. 背景大小自适应 3. 背景自适应保持比例同时, 相对居中 js源码: (function ($) { $.fn.bgChange = functi ...

  9. 分享一个nodejs写的小论坛

    引言:作为一个前端小菜鸟,最近迷上了node,于是乎空闲时间,为了练练手写了一个node的小社区,关于微信小程序的,欢迎大家批评指导. 项目架构部分 一.前端架构 作为一个写样式也得无聊的前端狮,我偷 ...

随机推荐

  1. JS获取两个日期的月份差

    function getMonthBetween(startDate,endDate){ startDate=new Date(startDate.replace(/-/g,'/')); endDat ...

  2. C++学习42 输入和输出的概念

    我们经常用到的输入和输出,都是以终端为对象的,即从键盘输入数据,运行结果输出到显示器屏幕上.从操作系统的角度看,每一个与主机相连的输入输出设备都被看作一个文件.除了以终端为对象进行输入和输出外,还经常 ...

  3. C++学习5

    类是创建对象的模板,一个类可以创建多个对象,每个对象都是类类型的一个变量:创建对象的过程也叫类的实例化.每个对象都是类的一个具体实例(Instance),拥有类的成员变量和成员函数. 与结构体一样,类 ...

  4. spring错误<context:property-placeholder>:Could not resolve placeholder XXX in string value XXX

    spring同时集成redis和mongodb时遇到多个资源文件加载的问题 这两天平台中集成redis和mongodb遇到一个问题 单独集成redis和单独集成mongodb时都可以正常启动程序,但是 ...

  5. [SQL]sql语句中charindex的用法

    假如你写过很多程序,你可能偶尔会碰到要确定字符或字符窜串否包含在一段文字中,在这篇文章中,我将讨论使用CHARINDEX和PATINDEX函数来搜索文字列和字符串.我将告诉你这两个函数是如何运转的,解 ...

  6. DataRow对象的行状态(RowState)和行版本(DataRowVersion)属性

    DataRow对象有两个比较重要的属性,分别是行状态(RowState)和行版本(DataRowVersion),通过这两个属性能够有效的管理表中的行.下面简要的介绍一下行状态和行版本的特点和关系. ...

  7. [Uva 10085] The most distant state (BFS)

    题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  8. activity退出

    这里介绍两种方法:一种把每个activity记住,然后逐一干掉:另一种思路是使用广播.本文来源于网络,如有雷同,那是必须的.写此贴只是为了总结一下常用东东,还望原作者莫怪,本人真不是想侵权. 方法一. ...

  9. 翻译:Knockout 快速上手 - 2: 安装 knockoutJS

    只需要五个简单的步骤,就可以做好使用 Knockout 开发的准备! 第一步 我们需要什么? 最低限度,为了完成后面的教程,你需要如下的准备 Web 浏览器 文本编辑器 你的电脑上大约 2M 的磁盘空 ...

  10. CODESOFT中怎样打印数据库中的特定数据?

      CODESOFT可用于打印.标记和跟踪的零售库存标签软件,每种产品的售卖都代表着需要打印大量的条码标签.通常我们采用的方法就是在CODESOFT连接数据库批量打 印.但是如果数据量很大,该如何选择 ...