素材巴巴 > 程序开发 >

js监听input输入事件及使用防抖封装函数处理的实现

程序开发 2023-09-19 08:28:51

js监听input输入事件及使用防抖封装函数处理的实现

循序渐进:

1.实现input框的输入监听事件:


  //需要监听的dom//js实现(介绍两种方式)
 //方式一:利用input的oninput输入事件实现输入监听
 let inputChange1 = document.getElementById("search")//获取inputDominputChange1.oninput = function(){//监听输入事件console.log("监听到input输入")//输出let value1 = this.value//拿到输入的值let value2 = document.getElementById("search").value//获取值的方式二console.log(value1,value2)//输出}
 //方式二:利用input的oninput输入事件实现输入监听
 let inputChange2 = document.getElementById("search")//获取inputDominputChange2.addEventListener("onpropertychange",function(){console.log("监听到input输入")//输出let value1 = this.value//拿到输入的值let value2 = document.getElementById("search").value//获取值的方式二console.log(value1,value2)//输出})//jquery实现(介绍一种)$("#search").bind("input propertychange",function(){console.log("监听到input输入")let value = $("#search").val()//拿到输入的值console.log(value)//输出
 })

2.防抖函数

防抖函数的目的:为了限制函数的执行频率而出现,优化解决函数触发频率过高导致延迟及假死卡顿等bug的出现。大多用在查询和提交功能上。

设置时间内多次点击或者输入只会执行最后一次点击或者输入;

代码:

/*** 防抖函数的封装* @param func 需要防抖处理的函数* @param wait 等待时间 默认赋值了1秒* @immediate 第一次是否需要立即执行 boolean值 默认为 false* **/function debounce(func, wait = 1000, immediate = false) {// 定义一个变量来记录上一次的定时器函数的状态let timer = nulllet isImmediate = false//通过改变量控制函数是否立即执行//返回一个函数return function () {let _this = this//获取input的thislet args = arguments  //接收函数参数// 返回的变量,让函数只执行最后一次if (timer) {clearInterval(timer)   //删除上一次定时器}if (immediate && !isImmediate) {//第一次是否需要立即执行 当immediate和isImmediate 都为一个值时回立即执行func.apply(_this, args)isImmediate = true//使函数下次不会立即执行使其延迟} else {timer = setTimeout(function () {//将定时器声明为变量timerfunc.apply(_this, args)//如果处理函数需要用到input的this就通过这个apply从新绑定this,不绑定的话treeSearch函数this指向的是window(直接使用下面的func()就行),// func()//外部传入的函数 isImmediate = true//使函数下次不会立即执行使其延迟}, wait)//延迟执行时间}}}
 

3.input输入事件和节流的结合(点击事件也是如此)


 Document
 
 
 
 

效果图:

在这里插入图片描述

直接复制最下面的代码块就能看到效果了,如有错误望大佬能够指正。

有问题请联系wx:urbaneBinA


标签:

上一篇: 搭建Vue2脚手架 下一篇:
素材巴巴 Copyright © 2013-2021 http://www.sucaibaba.com/. Some Rights Reserved. 备案号:备案中。