插件性能尚好,我的E6500、2G內存,30秒內一共發生了4469次調 " /> 国产精品资源网站在线观看,浪货嗯啊趴下NP粗口黄暴,国产精品久久久久成人免费

天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

jQuery Autocomplete自動完成插件

相對于同類插件,他的特色有3點。
1、可緩存查詢結果 (二次查詢速度快)
2、非keyup監聽方式 (解決某些系統/情況下無法觸發keyxxx事件的問題)
3、簡潔的參數 (好看?)

插件性能尚好,我的E6500、2G內存,30秒內一共發生了4469次調用,耗時94.65毫秒;百度的是2432次調用,80.24毫秒。

接近1倍的調用是jQuery中的問題,但具體原因我還沒弄明白,如果那位兄弟知道的還請不吝賜教。

調用方法

復制代碼 代碼如下:
jQuery("#kw").suggest({
url:siteConfig.suggestionUrl,
params:{
kw:function(){return jQuery("#kw").val()},
n:10
}
});

參數url:baseUrl,例如http://www.target.com/search.php
參數params:url的后綴列表,范例中拼合的url為:http://www.target.com/search.php?kw=xxx&n=10&callback=?(默認加入callback)
參數delay:輸入間隔時間,主要是為了降低負載,數值越大,負載越低,查詢速度越慢。
參數cache:是否實用緩存,默認為true,例如當搜索“test”時,程序會將對應的查詢結果緩存,當第二次搜索test時直接從緩存中讀取。
參數formId:必須填寫,form表單的id
參數callback:是否使用jsonp以便處理跨域問題。
核心代碼:
suggest.js
復制代碼 代碼如下:
(function($){
$.tools = $.tools || {version: '1.0'};
$.tools.suggest = {};
$.tools.suggest.defaults = {
url : null,
params : null,
delay : 100,
cache : true,
formId : '#search_form',
focus:null,
callback : true
}
$.tools.suggest.borderKey = {
UP: 38,
DOWN: 40,
TAB: 9,
ESC: 27,
ENTER:13
}

$.fn.suggest=function(options,fn){
var options,key = $.tools.suggest.borderKey;
if($.isFunction(options)){
fn=options;
options = $.extend({}, $.tools.suggest.defaults, key);
}else{
options = $.extend({}, $.tools.suggest.defaults, key, options);
}
return this.each(function(){
var
self = $(this),
url = options.url,
params = options.params,
searchUrl = null,
searchtimer = 0,
delay = options.delay,
cache = options.cache,
callback = options.callback,
formobj = $(options.formId),
focus = options.focus,
rebox = $('<ul/>').attr("id","suggest"),
htmlLi = null,
litop = null,
lileft = null,
liwth = null,
tip = false,
val = null,
rlen = null,
UP = options.UP,
DOWN = options.DOWN,
TAB = options.TAB,
ESC = options.ESC,
ENTER = options.ENTER,
index = -1,
choseKey = null,
backval = null,
hidden = false,
locksuggest = false


//init
if(focus){
self.focus();
searchtimer = setInterval(getKey, delay);
}
self.bind("focus",function(){
searchtimer = setInterval(getKey, delay);
// 觸發焦點時初始化backval的值
backval = (backval=$.trim(self.val()))==''?null:backval;
})
.bind("blur",function(){
clearInterval(searchtimer);
searchtimer = 0;
hideResult();
})
.bind("keydown",function(e){
// 少于10項不使用switch
if(e.keyCode == UP){
clearInterval(searchtimer);
searchtimer = 0;
if($('#suggest').css('display') == 'none'){
reSet();
return false;
}
index--;
if(index<0){
index=Math.abs(rlen)-1;
}
changeSelect(index);
e.preventDefault();
return false;
}else if(e.keyCode == DOWN){
clearInterval(searchtimer);
searchtimer = 0;
if($('#suggest').css('display') == 'none'){
reSet();
return false;
}
index++;
if(index>=rlen){
index=0;
}
changeSelect(index);
e.preventDefault();
return false;
}else if(e.keyCode == TAB){
clearInterval(searchtimer);
searchtimer = 0;
hideResult();
}else if(e.keyCode == ESC){
clearInterval(searchtimer);
searchtimer = 0;
hideResult();
return false;
}else if(e.keyCode == ENTER){
clearInterval(searchtimer);
searchtimer = 0;
}else if(searchtimer == 0){
searchtimer = setInterval(getKey, delay);
}
});

// 獲取關鍵詞
function getKey(){
val = $.trim(self.val());
// 關鍵詞不為空且關鍵詞不重復
if(!!val && val!=backval){
backval = val;
// 如不需要緩存結果,設cache為false
if(cache && !!$.tools.suggest[val]){
index = -1;
rlen = $.tools.suggest[val][1];
appendSuggest($.tools.suggest[val][0]);
}else{
searchurl = url+'?'+$.param(params);
getResult(searchurl,function(htmltemp,htmllen){
index = -1;
rlen = htmllen;
appendSuggest(htmltemp);
});
}
}
// 關鍵詞為空
if(!!!val && !hidden){
hideResult();
}
}

// 獲取提示數據
function getResult(searchurl,fn){
if(callback){searchurl = searchurl+'&callback=?';}
$.getJSON(searchurl,function(data){
var htmltemp = '',
htmllen = 0,
inputWord = self.val()

$.each(data.list,function(i,n){
if(n.word != inputWord){
htmltemp += '<li>'+n.word+'</li>';
htmllen++;
}
});
if(cache && !!!$.tools.suggest[val]){$.tools.suggest[val]=[htmltemp,htmllen];}
fn.call(document,htmltemp,htmllen)
});
}

// 插入提示數據
function appendSuggest(result){
locksuggest = hidden = false;
if(!!result){
if(!tip){
litop = self.offset().top+self.outerHeight()-1;
lileft = self.offset().left;
liwth = self.outerWidth()-2;
rebox.css({'position':'absolute','top':litop,'left':lileft,'width':liwth}).html(result).appendTo('body').show();
tip = true;
}else{
rebox.html(result).show();
}
rebox.find('li').bind('mouseover',function(){
// 鎖定提示層,保證不因冒泡關閉提示層
locksuggest = true;
index = $(this).index();
changeSelect(index,false);
})
.bind('click',function(){
changeSelect(index);
searchSubmit();
});
rebox.bind('mouseout',function(){
locksuggest = false;
})
}else{
// 如果檢索結果為空,清空提示層
rebox.hide();
}
}

function changeSelect(index,v){
v=v==false?false:true;
var obj = rebox.find('li').eq(index);
rebox.find('li.mo').removeClass('mo');
obj.addClass("mo");
if(v){
choseKey = backval = obj.html();
self.val(choseKey);
}
}

function reSet(){
if(!!self.val()){
index = -1;
$('#suggest').css('display','block');
rebox.find('li.mo').removeClass('mo');
// 根據html結構重新計算提示結果長度
rlen = rebox.find('li').size();
}
}

function hideResult(){
if(!locksuggest){
choseKey = backval = null;
hidden = true;
rebox.hide();
}
}

function searchSubmit(){
self.val(choseKey);
hideResult();
clearInterval(searchtimer);
formobj.submit();
}

});
}
})(jQuery);

代碼打包下載

JavaScript技術jQuery Autocomplete自動完成插件,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 美女与男人对肌免费网站 | 纯肉巨黄H爆粗口男男分卷阅读 | 拔萝卜电视剧高清免费 | 免费高清国产 | 精品无码无人网站免费视频 | 国产AV午夜精品一区二区入口 | 免费看a视频 | 99视频在线免费观看 | 久久综合狠狠综合狠狠 | 婷婷色色狠狠爱 | 琪琪电影午夜理论片YY6080 | 黄色三级三级三级免费看 | 人妻夜夜爽99麻豆AV | 国产噜噜噜精品免费 | 四虎成人影院 | 色偷拍自怕亚洲在线 | 精品一区二区三区在线成人 | 亚洲免费网站观看视频 | 亚洲精品免费观看 | 亚洲AV无码国产精品午夜久久 | 国产精品VIDEOSSEX久久发布 | 啦啦啦 中文 日本 韩国 免费 | 秘密教学26我们在做一次吧免费 | 3d无遮挡h肉动漫在线播放 | 国产午夜亚洲精品不卡电影 | 特黄特色大片免费播放器试看 | 美丽的姑娘BD在线观看 | 婷婷亚洲五月色综合久久 | 为什么丈夫插我我却喜欢被打着插 | 主播蜜汁丝袜精品自拍 | 无限好资源免费观看 | 久久精品热在线观看30 | 泡妞高手在都市免费观看 | wankz tv videos国产| 黑粗硬大欧美在线视频 | 男人都懂www深夜免费网站 | 內射XXX韩国在线观看 | 国产成人久久AV免费看澳门 | 亚洲AV午夜精品麻豆AV | 伊人久久精品AV一区二区 | 日本高清免费在线 |