300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > jquery 模拟类搜索框自动完成搜索提示功能(改进)【jquery】

jquery 模拟类搜索框自动完成搜索提示功能(改进)【jquery】

时间:2019-02-04 09:11:13

相关推荐

jquery 模拟类搜索框自动完成搜索提示功能(改进)【jquery】

web前端|js教程

jquery,自动完成,搜索提示

web前端-js教程

autopoint.js代码:

互动投影软件源码,vscode在左侧显示目录,ubuntu常用设置,tomcat漏洞怎么修复,前端爬虫数据,php 两个二维数组合并,大公司如何做seo,网站banner flash源文件lzw

/*

* @date: -5-22 21:42:15

* @author: 胡灵伟

* Depends:

* jquery.js

*

* function:类似GOOGLE搜索框提示功能

*/

(function($) {

$.fn.autopoint = function (options) {

defaults = {

url:options.url,

keyLeft : 37,//向左方向键

keyUp : 38,//向上方向键

keyRight : 39,//向右方向键

keyDown : 40,//向下方向键

keyEnter : 13,//回车键

listHoverCSS : jhover,//提示框列表鼠标悬浮的样式

tpl :

{word}

约{view}条记录

,

topoffset:options.topoffset||5

};

var options = $.extend(defaults, options);

var dropDiv = $(

).addClass(dropDiv).appendTo(ody);

var isOver = false;

dropDiv.hover(function(){

isOver = true;

}, function(){

isOver = false;

});

return this.each(function(){

var pa = $(this);

$(this).bind(keydown, function(event){

if (dropDiv.css(display) != one) {//当提示层显示时才对键盘事件处理

var currentList = dropDiv.find(. + options.listHoverCSS);

if (event.keyCode == options.keyDown) {//如果按的是向下方向键

if (currentList.length == 0) {

//如果提示列表没有一个被选中,则将列表第一个选中

$(this).val(getPointWord(dropDiv.find(.list:first)

.mouseover()));

} else if (currentList.next().length == 0) {

//如果是最后一个被选中,则取消选中,即可认为是输入框被选中

unHoverAll();

} else {

unHoverAll();

//将原先选中列的下一列选中

if (currentList.next().length != 0)

$(this).val(getPointWord(currentList.next()

.mouseover()));

}

return false;

} else if (event.keyCode == options.keyUp) {//如果按的是向上方向键

if (currentList.length == 0) {

$(this).val(getPointWord(dropDiv.find(.list:last)

.mouseover()));

} else if (currentList.prev().length == 0) {

unHoverAll();

} else {

unHoverAll();

if (currentList.prev().length != 0)

$(this).val(getPointWord(currentList.prev()

.mouseover()));

}

return false;

}else if(event.keyCode == options.keyEnter) dropDiv.empty().hide();

}

//当按下键之前记录输入框值,以方便查看键弹起时值有没有变

$(this).attr(alt, $(this).val());

}).bind(keyup, function(event){

//如果弹起的键是向上或向下方向键则返回

if(event.keyCode == options.keyDown||event.keyCode == options.keyUp) return;

if($(this).val() == \){

dropDiv.empty().hide();

return;

}

//若输入框值没有改变或变为空则返回

if ($(this).val() == $(this).attr(alt))

return;

getData(pa, $(this).val());

}).bind(lur, function(){

if(isOver&&dropDiv.find(. + options.listHoverCSS)!=0) return;

//文本输入框失去焦点则清空并隐藏提示层

dropDiv.empty().hide();

});

/**处理ajax返回成功的方法**/

handleResponse = function(parent, json) {

var isEmpty = true;

for(var o in json){

if(o == data) isEmpty = false;

}

if(isEmpty) {

showError("返回数据格式错误,请检查请求URL是否正确!");

return;

}

if(json[data].length == 0) {

//返回数据为空

return;

}

refreshDropDiv(parent, json);

dropDiv.show();

}

/**处理ajax失败的方法**/

handleError = function(error) {

//showError("由于url错误或超时请求失败!");

}

showError = function(error){

alert(error);

}

/**通过ajax返回json格式数据生成用来创建dom的字符串**/

render = function(parent, json) {

var res = json[data] || json;

var appendStr = \;

//用json对象中内容替换模版字符串中匹配/\{([a-z]+)\}/ig的内容,如{word},{view}

for ( var i = 0; i < res.length; i+=1) {

appendStr += options.tpl.replace(/\{([a-z]+)\}/ig, function(m, n) {

return res[i][n];

});

}

jebind(parent, appendStr);

}

/**将新建dom对象插入到提示框中,并重新绑定mouseover事件监听**/

jebind = function(parent, a) {

dropDiv.append(a);

dropDiv.find(.list).each(function() {

$(this).unbind(mouseover).mouseover(function() {

unHoverAll();

$(this).addClass(options.listHoverCSS);

}).unbind(click).click(function(){

parent.val(getPointWord($(this)));

dropDiv.empty().hide();

parent.focus();

});

});

}

/**将提示框中所有列的hover样式去掉**/

unHoverAll = function() {

dropDiv.find(.list).each(function() {

$(this).removeClass(options.listHoverCSS);

});

}

/**在提示框中取得当前选中的提示关键字**/

getPointWord = function(p) {

return p.find(div:first).text()

}

/**刷新提示框,并设定样式**/

refreshDropDiv = function(parent, json) {

var left = parent.offset().left;

var height = parent.height();

var top = parent.offset().top + options.topoffset + height;

var width = options.width || parent.width() + px;

dropDiv.empty();

dropDiv.css( {

order : 1px solid #FE00DF,

left : left,

op : top,

width : width

});

render(parent, json);

//防止ajax返回之前输入框失去焦点导致提示框不消失

parent.focus();

}

/**通过ajax向服务器请求数据**/

getData = function(parent, word) {

$.ajax( {

type : GET,

data : "word="+ word,

url : options.url,

dataType : json,

timeout : 1000,

success : function(json){handleResponse(parent, json);},

error : handleError

});

}

});

}

})(jQuery);

网页上主要样式:

报餐源码,ubuntu文件显示行数,爬虫的繁衍方式,php定义边框,监测seo效果lzw

.dropDiv {

position: absolute;

z-index: 10;

display: none;

cursor: hand;

}

.dropDiv .jhover {

background-color: #00FEDF;

}

.dropDiv .list {

float:left;

width:100%;

}

.dropDiv .word {

float:left;

}

.dropDiv .view {

float:right;

color: gray;

text-align: right;

font-size: 10pt;

}

调用方法:

小型威客源码,Ubuntu安装ssh插件,tomcat环境百度云,爬虫token登录校验,php工程师工作内容,森林原人seolzw

$(function(){

$("input").autopoint({url:http://localhost/xun/ajax.svl?method=getsearchhelp});

});

servlet主要部分:

response.setContentType("text/html");

response.setHeader("Cache-Control", "no-cache");

response.setCharacterEncoding("UTF-8");

String word = request.getParameter("word");

if(Utils.isBlank(word)) return;

JSONObject json = new JSONObject();

JSONArray array = new JSONArray();

Map map1 = new HashMap();

map1.put("word", word + "a1");

map1.put("view", 10);

Map map2 = new HashMap();

map2.put("word", word + "a2");

map2.put("view", 15);

Map map3 = new HashMap();

map3.put("word", word + "a3");

map3.put("view", 2);

array.add(JSONObject.fromObject(map1));

array.add(JSONObject.fromObject(map2));

array.add(JSONObject.fromObject(map3));

json.put("data", array);

PrintWriter out = response.getWriter();

out.print(json.toString());

out.close();

其中JSONObject和JSONArray类来自json-lib.jar,为了测试方便,是直接返回数据的,实际应用中可以替换为

从数据源查取数据.

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。