当前位置:
首页 > temp > JavaScript教程 >
-
js原生搜索框自动搜索
场景:搜索框,模糊搜索
HTML:
<body>
<div class="searchBox">
<input type="search" name="" placeholder="请输入" id="search">
<ul class="ulList">
</ul>
</div>
<script src="./js/ajax.js"></script>
<script src="./js/index.js"></script>
</body>
SCSS:
.searchBox{
position: fixed;
top: 20%;
left: 50%;
width: 50%;
transform: translate(-50%);
#search{
width: 100%;
border: 1px solid #000;
height: 30px;
outline:none;
font-size: 16px;
}
.ulList{
list-style: none;
margin: 0;
padding: 0;
.liList{
font-size: 16px;
margin-top: -2px;
padding-left: 2px;
height: 30px;
line-height: 30px;
border: 1px solid #000;
border-top: none;
}
}
}
JS:
//封装的ajax
function ajax(Options) {
var defaults = {
type: 'GET',
url: '',
data: {},
header: {
'Content-Type': 'application/x-www-form-urlencoded'
},
success: function(res,xhr) {
console.log(res)
},
error: function (err,xhr) {
console.log(err)
console.log(xhr)
}
};
Object.assign(defaults, Options)
var xhr = new XMLHttpRequest();
var params = ''
for( var attr in defaults.data ){
params += attr + '=' + defaults.data[attr] +'&'
}
params = params.substr(0, params.length - 1)
if (defaults.type == 'GET') {
defaults.url = defaults.url + '?' + params
}
xhr.open(defaults.type, defaults.url)
if (defaults.type == 'POST') {
var contentType = defaults.header['Content-Type']
xhr.setRequestHeader('Content-Type', contentType)
if (contentType == 'application/json') {
xhr.send(JSON.stringify(defaults.data))
}else{
xhr.send(params)
}
}else{
xhr.send()
}
xhr.onload = function () {
var contentType = xhr.getResponseHeader('Content-Type')
var responseText = xhr.responseText
if( contentType && contentType.includes('application/json')){
responseText = JSON.parse(responseText)
}
if ( xhr.status >= 200 && xhr.status < 300 ) {
defaults.success(responseText, xhr)
}else{
defaults.error(responseText, xhr)
}
}
}
var searchInput = document.getElementById('search');
var ulList = document.getElementsByClassName('ulList')[0];
var ulListNode = ulList.getElementsByTagName("li");
var timer = null;
//监听input尝试输入
searchInput.oninput = function () {
// 判断input除去空格后的长度是否为0
if (searchInput.value.trim().length == 0) {
// 为0则清除ul下所有li
for (let i = ulListNode.length; i > 0; i--) {
ulList.removeChild(ulListNode[i - 1])
}
} else {
//清除定时器
clearTimeout(timer);
//启动定时器,用来防抖
timer = setTimeout(function () {
// 发送请求
ajax({
url: 'http://127.0.0.1:8001/server',
data: {
keyWord: searchInput.value
},
header: {
'Content-Type': 'application/json'
},
success: function (res) {
// 清除ul里的子节点li,用的倒叙
for (let i = ulListNode.length; i > 0; i--) {
ulList.removeChild(ulListNode[i - 1])
}
//根据传回数据创建ul下的li
for (let i = 0; i < res.length; i++) {
var liNode = document.createElement("li")
liNode.classList.add('liList')
liNode.innerHTML = res[i]
ulList.appendChild(liNode)
}
//如果input中value为空清除ul下li
if ( searchInput.value == '') {
for (let i = ulListNode.length; i > 0; i--) {
ulList.removeChild(ulListNode[i - 1])
}
}
}
})
}, 300);
}
}
新手自己学习,有什么问题请大家多多谅解
来源:https://www.cnblogs.com/YouAreNotFishPoi/p/15196707.html
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程
检测数据类型的四种方法
js中数组的方法,32种方法
前端操作方法
数据类型
window.localStorage.setItem 和 localStorage.setIte
如何完美解决前端数字计算精度丢失与数