热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

基于jquery的仿百度搜索框效果代码_jquery

最近项目中用到类似百度的输入框,于是自己用jquery写了一个。希望和大家共同分享一下。存在许多bug,请各位不吝赐教。
先看看整个的效果图:
图一:

图二:

图三:

图四:

大概的效果图就这样,接下来直接看源码
页面:

代码如下:


<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="autoSearch._Default" %>
<%if (false){ %> <%} %>







CSS:

代码如下:


.autoSearchText{
border:solid 1px #CFCFCF;
height:20px;
color:Gray;
}
.menu_v{
margin:0;
padding:0;
line-height:20px;
font-size:12px;
list-style-type:none;
}
.menu_v li{
margin:0;
padding:0;
line-height:20px;
font-size:14px;
list-style-type:none;
float:none;
}
.menu_v li span{
color:Red;
}
#autoSearchItem{
border:solid 1px #CFCFCF;
visibility:hidden;
position:absolute;
background-color:white;
overflow-y:auto;
}


JS:

代码如下:


1 ///
2
3 (function($) {
4 var itemIndex = 0;
5
6 $.fn.autoSearchText = function(options) {
7 //以下为该插件的属性及其默认值
8 var deafult = {
9 width: 200, //文本框宽
itemHeight: 150, // 下拉框高
minChar: 1, //最小字符数(从第几个开始搜索)
datafn: null, //加载数据函数
fn: null //选择项后触发的回调函数
};
var textDefault = $(this).val();
var ops = $.extend(deafult, options);
$(this).width(ops.width);
var autoSearchItem = '

';
$(this).after(autoSearchItem);
$('#autoSearchItem').width(ops.width + 2); //设置项宽
$('#autoSearchItem').height(ops.itemHeight); //设置项高
$(this).focus(function() {
if ($(this).val() == textDefault) {
$(this).val('');
$(this).css('color', 'black');
}
});
var itemCount = $('li').length; //项个数
/*鼠标按下键时,显示下拉框,并且划过项时改变背景色及赋值给输入框*/
$(this).bind('keyup', function(e) {
if ($(this).val().length >= ops.minChar) {
var position = $(this).position();
$('#autoSearchItem').css({ 'visibility': 'visible', 'left': position.left, 'top': position.top + 24 });
var data = ops.datafn($(this).val());
initItem($(this), data);
var itemCount = $('li').length;
switch (e.keyCode) {
case 38: //上
if (itemIndex > 1) {
itemIndex--;
}
$('li:nth-child(' + itemIndex + ')').css({ 'background': 'blue', 'color': 'white' });
$(this).val($('li:nth-child(' + itemIndex + ')').find('font').text());
break;
case 40: //下
if (itemIndex itemIndex++;
}
$('li:nth-child(' + itemIndex + ')').css({ 'background': 'blue', 'color': 'white' });
$(this).val($('li:nth-child(' + itemIndex + ')').find('font').text());
break;
case 13: //Enter
if (itemIndex > 0 && itemIndex <= itemCount) {
$(this).val($('li:nth-child(' + itemIndex + ')').find('font').text());
$('#autoSearchItem').css('visibility', 'hidden');
ops.fn($(this).val());
}
break;
default:
break;
}
}
});
/*点击空白处隐藏下拉框*/
$(document).click(function() {
$('#autoSearchItem').css('visibility', 'hidden');
});
};
/*获取文本框的值*/
$.fn.getValue = function() {
return $(this).val();
};
/*初始化下拉框数据,鼠标移过每项时,改变背景色并且将项的值赋值给输入框*/
function initItem(obj, data) {
var str = "";
if (data.length == 0) {
$('#autoSearchItem ul').html('

无符合数据

');
}
else {
for (var i = 1; i <= data.length; i++) {
str += "

  • " + i + "/" + data.length + "\r" + data[i - 1] + "
  • ";
    }
    $('#autoSearchItem ul').html(str);
    }
    /*点击项时将值赋值给搜索文本框*/
    $('li').each(function() {
    $(this).bind('click', function() {
    obj.val($(this).find('font').text());
    $('#autoSearchItem').css('visibility', 'hidden');
    });
    });
    /*鼠标划过每项时改变背景色*/
    $('li').each(function() {
    $(this).hover(
    function() {
    $('li:nth-child(' + itemIndex + ')').css({ 'background': 'white', 'color': 'black' });
    itemIndex = $('li').index($(this)[0]) + 1;
    $(this).css({ 'background': 'blue', 'color': 'white' });
    obj.val($('li:nth-child(' + itemIndex + ')').find('font').text());
    },
    function() {
    $(this).css({ 'background': 'white', 'color': 'black' });
    }
    );
    });
    };
    })(jQuery);


    getdata.ashx

    代码如下:


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Services;
    namespace table
    {
    ///


    /// $codebehindclassname$ 的摘要说明
    ///

    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(COnformsTo= WsiProfiles.BasicProfile1_1)]
    public class getData : IHttpHandler
    {
    public void ProcessRequest(HttpContext context)
    {
    context.Response.Clear();
    string value = GetResult();
    context.Response.Write(value);
    context.Response.End();
    }
    private string GetResult()
    {
    string result = string.Empty;
    result = @"
    [{""id"":""1"",""Code"":""1374123""},
    {""id"":""2"",""Code"":""1374133""},
    {""id"":""3"",""Code"":""1374143""},
    {""id"":""4"",""Code"":""1374153""},
    {""id"":""5"",""Code"":""1374163""},
    {""id"":""6"",""Code"":""1374173""},
    {""id"":""7"",""Code"":""1374183""},
    {""id"":""8"",""Code"":""1374193""},
    {""id"":""9"",""Code"":""1374213""},
    {""id"":""10"",""Code"":""1374223""},
    {""id"":""11"",""Code"":""1374233""},
    {""id"":""12"",""Code"":""1374243""},
    {""id"":""13"",""Code"":""1374253""},
    {""id"":""14"",""Code"":""1374263""},
    {""id"":""15"",""Code"":""1374273""},
    {""id"":""16"",""Code"":""1374283""},
    {""id"":""17"",""Code"":""1374293""},
    {""id"":""18"",""Code"":""1374313""},
    {""id"":""19"",""Code"":""1374323""},
    {""id"":""20"",""Code"":""1374333""},
    {""id"":""21"",""Code"":""1374343""},
    {""id"":""22"",""Code"":""1374353""},
    {""id"":""23"",""Code"":""1374363""},
    {""id"":""24"",""Code"":""1374373""},
    {""id"":""25"",""Code"":""1374383""},
    {""id"":""26"",""Code"":""1374393""},
    {""id"":""27"",""Code"":""1374403""},
    {""id"":""28"",""Code"":""1374413""},
    {""id"":""29"",""Code"":""1374423""},
    {""id"":""30"",""Code"":""1374433""},
    {""id"":""31"",""Code"":""1374443""},
    {""id"":""32"",""Code"":""1374453""},
    {""id"":""33"",""Code"":""1374463""},
    {""id"":""34"",""Code"":""1374473""},
    {""id"":""35"",""Code"":""1374483""},
    {""id"":""36"",""Code"":""1374493""}]";
    return result;
    }
    public bool IsReusable
    {
    get
    {
    return false;
    }
    }
    }
    }


    Demo下载
    推荐阅读
    • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
    • VScode格式化文档换行或不换行的设置方法
      本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
    • Java实战之电影在线观看系统的实现
      本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
    • Ihavethefollowingonhtml我在html上有以下内容<html><head><scriptsrc..3003_Tes ... [详细]
    • HTML5网页模板怎么加百度统计?
      本文介绍了如何在HTML5网页模板中加入百度统计,并对模板文件、css样式表、js插件库等内容进行了说明。同时还解答了关于HTML5网页模板的使用方法、表单提交、域名和空间的问题,并介绍了如何使用Visual Studio 2010创建HTML5模板。此外,还提到了使用Jquery编写美好的HTML5前端框架模板的方法,以及制作企业HTML5网站模板和支持HTML5的CMS。 ... [详细]
    • 本文介绍了如何使用jQuery和AJAX来实现动态更新两个div的方法。通过调用PHP文件并返回JSON字符串,可以将不同的文本分别插入到两个div中,从而实现页面的动态更新。 ... [详细]
    • 从零基础到精通的前台学习路线
      随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ... [详细]
    • 本文介绍了Java后台Jsonp处理方法及其应用场景。首先解释了Jsonp是一个非官方的协议,它允许在服务器端通过Script tags返回至客户端,并通过javascript callback的形式实现跨域访问。然后介绍了JSON系统开发方法,它是一种面向数据结构的分析和设计方法,以活动为中心,将一连串的活动顺序组合成一个完整的工作进程。接着给出了一个客户端示例代码,使用了jQuery的ajax方法请求一个Jsonp数据。 ... [详细]
    • 本文介绍了DataTables插件的官方网站以及其基本特点和使用方法,包括分页处理、数据过滤、数据排序、数据类型检测、列宽度自动适应、CSS定制样式、隐藏列等功能。同时还介绍了其易用性、可扩展性和灵活性,以及国际化和动态创建表格的功能。此外,还提供了参数初始化和延迟加载的示例代码。 ... [详细]
    • 前言:关于跨域CORS1.没有跨域时,ajax默认是带cookie的2.跨域时,两种解决方案:1)服务器端在filter中配置详情:http:blog.csdn.netwzl002 ... [详细]
    • Itwasworkingcorrectly,butyesterdayitstartedgiving401.IhavetriedwithGooglecontactsAPI ... [详细]
    • 用JavaScript实现的太空人手表
      用JavaScript实现的太空人手表-JS写的太空人手表,没有用canvas、svg。主要用几个大的函数来动态显示时间、天气这些。天气的获取用到了AJAX请求。代码中有详细的注释 ... [详细]
    • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
      本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
    • mui框架offcanvas侧滑超出部分隐藏无法滚动如何解决
      web前端|js教程off-canvas,部分,超出web前端-js教程mui框架中off-canvas侧滑的一个缺点就是无法出现滚动条,因为它主要用途是设置类似于qq界面的那种格 ... [详细]
    • 表单提交前的最后验证:通常在表单提交前,我们必须确认用户是否都把必须填选的做了,如果没有,就不能被提交到服务器,这里我们用到表单的formname.submit()看演示,其实这个对于我们修炼道 ... [详细]
    author-avatar
    Blackn
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有