十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
大部分頁面都具備搜索功能。而作為前端,我們的目的只是將用戶輸入的內(nèi)容返回給后臺(tái)而后呈現(xiàn)反饋數(shù)據(jù)給用戶,具體實(shí)現(xiàn)如下:
創(chuàng)新互聯(lián)是一家以重慶網(wǎng)站建設(shè)公司、網(wǎng)頁設(shè)計(jì)、品牌設(shè)計(jì)、軟件運(yùn)維、seo優(yōu)化排名、小程序App開發(fā)等移動(dòng)開發(fā)為一體互聯(lián)網(wǎng)公司。已累計(jì)為成都除甲醛等眾行業(yè)中小客戶提供優(yōu)質(zhì)的互聯(lián)網(wǎng)建站和軟件開發(fā)服務(wù)。
1.基本布局:
![]()
取消
這里涉及一個(gè)問題如何將搜索圖標(biāo)放入input中,網(wǎng)上有相關(guān)資料不做贅述:
.searcher {
background: rgba(255, 255, 255, 0);
position: fixed;
z-index: 999;
width: 100%;
height: 6rem;
text-align: center;
font-size: 1.6rem;
}
.searcher-main {
background: #F4F4F4;
position: absolute;
left: 50%;
top: 1.2rem;
margin-left: -45%;
border-radius: 1.6rem;
width: 80%;
height: 3rem;
line-height: 3rem;
}
.searcher-text {
width: 80%;
text-align: center;
border: none;
outline: none;
background: #F4F4F4;
}
.searcher-cancel {
position: absolute;
width: 10%;
height: 3rem;
line-height: 3rem;
color: #929292;
top: 1.2rem;
right: 1rem;
}
2.step-1:

3.js部分
這里要安利IE9以上的oninput事件
onchange事件只在鍵盤或者鼠標(biāo)操作改變對(duì)象屬性,且失去焦點(diǎn)時(shí)觸發(fā),腳本觸發(fā)無效。
onkeydown/onkeypress/onkeyup在處理復(fù)制、粘貼、拖拽、長(zhǎng)按鍵(按住鍵盤不放)等細(xì)節(jié)上并不完善。
onpropertychange不用考慮是否失去焦點(diǎn),不管js操作還是鍵盤鼠標(biāo)手動(dòng)操作,只要HTML元素屬性發(fā)生改變即可立即捕獲到。遺憾的是,onpropertychange為IE專屬的。
//監(jiān)聽input框,實(shí)時(shí)渲染
$('.searcher-text').on('input', function() {
initSearchList();
});
JQ一般都是用這種+=html的方法,雖然累贅不過通過url或者tag標(biāo)簽里屬性傳參較容易理解。
//渲染搜索列表
function initSearchList() {
var List = $('.searcher-land ul');
var params = {};
//搜索過濾字符
var SEARCH_KEY = $('.searcher-text').val()
params['action'] = 'get_search_key_list';
params['market_iid'] = 1001;
params['search_type'] = TYPE;
params['search_key'] = replaceIllegalStr(SEARCH_KEY);
epm.ajax(params, function(result) {
console.log(result);
console.log(TYPE)
var html = '';
List.html('');
//有結(jié)果
if(result.data.length > 0) {
$.each(result.data, function(index, value) {
goodName = value['goods_name'];
shopName = value['shop_name'];
//判斷Name類型
itemName = (goodName) ? goodName : shopName;
html += '注意這里有一個(gè)replaceIllegalStr()方法,類似正則,目的是過濾掉一些無用的符號(hào)以免給后端接收數(shù)據(jù)帶來不必要的麻煩。
function replaceIllegalStr(str) {
var reg;
var illegal_list = ["/", "\\",
"[", "]",
"{", "}",
"<", ">",
"<", ">",
"「", "」",
":", ";",
"、", "•",
"^", "'", "\"",
"\r", "\r\n", "\\n", "\n"];
for (var i = 0; i < illegal_list.length; i++) {
if (str.indexOf(illegal_list[i]) >= 0) {
if (illegal_list[i] == '\\' || illegal_list[i] == '[') {
reg = new RegExp('\\' + illegal_list[i], "g");
} else {
reg = new RegExp(illegal_list[i], "g");
}
str = str.replace(reg, '');
}
}
return str.trim();
}
4.step-2:

5.緩存
這里我們將點(diǎn)擊的數(shù)據(jù)保存在本地緩存里,供取用呈現(xiàn):
注: epm是自己封裝的一個(gè)方法與屬性的對(duì)象
//設(shè)置緩存
epm.setLocalItem = function(key, value) {
if (window.localStorage) {
localStorage.setItem(key, value);
} else {
//后備方案
setCookie(key, value);
}
};
//提取緩存
epm.getLocalItem = function(key) {
if (window.localStorage) {
return localStorage.getItem(key);
} else {
//后備方案
return getCookie(key);
}
};
//刪除緩存
epm.removeLocalItem = function(key) {
if (window.localStorage) {
localStorage.removeItem(key);
} else {
//后備方案
removeCookie(key);
}
};

6.step-3
得到點(diǎn)擊的相應(yīng)的緩存詞里的value,再次發(fā)送ajax:

更多搜索功能實(shí)現(xiàn)的精彩文章,請(qǐng)點(diǎn)擊專題:javascript搜索功能匯總 進(jìn)行學(xué)習(xí)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。