哪里都在用suggest。自己写一个,改起来灵活随意
function Suggest(obj, url, callback){
obj = typeof obj == "string" ? $("#" + obj) : $(obj);
this.position = obj.offset();
this.left = this.position.left;
this.top = this.position.top;
if(obj[0].offsetHeight){
this.top = this.top + obj[0].offsetHeight;
}
this.url = url;
this.obj = obj;
this.selectP = null;
this.selectIndex = -1;
var that = this;
obj.on("keyup", function(e){
var target = $(this);
var kCode = e.keyCode;
switch(kCode){
case 13:
callback && callback();
break;
case 38: //up
$("#suggestContainer").find("p").removeClass("cur");
if(that.selectIndex == -1){
that.selectIndex = that.length;
}
that.selectIndex --;
that.selectIndex != -1 && $("#suggestContainer p").eq(that.selectIndex).addClass("cur");
obj.val(that.selectIndex != -1 ? $("#suggestContainer p").eq(that.selectIndex).html() : that.inputContent);
break;
case 40: //down
$("#suggestContainer").find("p").removeClass("cur");
if(that.selectIndex == that.length){
that.selectIndex = -1;
}
that.selectIndex ++;
if(that.selectIndex == that.length){
that.selectIndex = -1;
obj.val(that.inputContent);
} else {
$("#suggestContainer p").eq(that.selectIndex).addClass("cur");
obj.val($("#suggestContainer p").eq(that.selectIndex).html());
}
break;
default:
that.inputContent = obj.val();
if(!target.val()){
$("#suggestContainer").remove();
that.selectIndex = -1;
} else{
that.send(target.val());
}
break;
}
});
obj.on("blur", function(){
$("#suggestContainer").remove();
});
}
Suggest.prototype.init = function(data){
data = data || [];
$("#suggestContainer").remove();
if(!data.length){
return;
}
this.length = data.length;
var that = this;
that.selectIndex = -1;
var container = [];
container.push('<div id="suggestContainer" style="position:absolute; z-index:3000; top:' + this.top + 'px; left:' + this.left + 'px;">');
for(var i = 0, len = data.length; i < len; i++){
container.push('<p>' + data[i].name + '</p>');
}
container.push('</div>');
$(document.body).append($(container.join("")));
$("#suggestContainer").delegate("p", "hover", function(){
$("#suggestContainer").find("p").removeClass("cur");
var target = $(this);
that.selectIndex = $("#suggestContainer p").index(target);
});
$("#suggestContainer").on("keypress", function(e){
var kCode = e.keyCode;
if(kCode == 13){
that.obj.val($("#suggestContainer p").eq(that.selectIndex).val());
$("#suggestContainer").remove();
that.obj.blur();
}
});
}
//返回的数据格式肯定不同,需要重写此方法
Suggest.prototype.send = function(input){
var that = this;
$.ajax({
url : this.url + input,
type : "get",
dataType : "jsonp",
success : function(data){
data = data.data;
var dataThis = [];
for(var i = 0, len = data.length; i < len; i++){
dataThis.push({"name":data[i].soft_name});
}
that.init(dataThis);
}
});
}
css,可以自己定义
#suggestContainer {
border:1px solid #90b8f5;
width:150px;
overflow:hidden;
cursor:pointer;
}
#suggestContainer p {
height:20px;
line-height:20px;
font-size:14px;
font-family:"微软雅黑", sans-serif;
padding-left:5px;
background-color:#fff;
margin:0;
white-space:nowrap;
}
#suggestContainer p.cur {
color:#fff;
background-color:#90b8f5;
}
#inputSuggest {
font-size:14px;
font-family:"微软雅黑", sans-serif;
}
使用:
//自己定义,点选suggest,或上下选取suggest时回车事件
function submitFun(){
alert($("#inputSuggest").val());
}
//初始化。
//1 输入框ID
//2 suggest接口,以"keyword="结尾,
//3 点选时事件
var suggest = new Suggest("inputSuggest", "http://xxxx?keyword=", submitFun);