首页 > 其他分享 >js实现输入框防抖功能

js实现输入框防抖功能

时间:2023-08-03 17:12:35浏览次数:32  
标签:防抖 定时器 console log args js 输入框 timeout input

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <input type="text">
    <script>
        let input = document.querySelector("input");
        input.addEventListener('input', debounce(function (e,b) {
            console.log(e);
        }, 3000))
        function debounce(fn, await) {
            //第一个参数是函数,第二个参数时等待的时间
            let timeout = null;
            var args1 = arguments;
            var  count=0;
            //let _that=this
            return function (...args) {
                // console.log(...args1);
                // console.log(this);//这里的this指向当前调用者对象也就是 input
                // console.log(...args);//所有的打印都是为了看清到底是谁被当做参数传递进来了
                //这个地方用课解构es6的新特性,因为不知道会传递几个参数
                //因为第一次定时器为空所以不会进入,当第二次触发也就是用户在此输入的时候就不为空了
                //就会进入判断然后再让定时器为空,直到用户最后一次输入清除以后timeout就有值了就会执行定时器里面的操作了
                if (timeout) {
                    // console.log(this);//这里的this指向当前调用者对象也就是 input
                    //如果timeout有值就清除定时器让定时器从新计时
                    clearTimeout(timeout);
                }else {
                    if(count===0){
                        fn.apply(this, args)
                    }
                    //这个else可有可无,看自己是否需要用户第一次输入的值去做一些操作
                    //这个地方是使用apply改变一下this指向后面的参数就是我们传递的函数
                    //
                }
                timeout = setTimeout(() => {
                    count=1
                    fn.apply(this, args)
                }, await)
            }
        }

    </script>
</body>

</html>

标签:防抖,定时器,console,log,args,js,输入框,timeout,input
From: https://www.cnblogs.com/7c89/p/17603854.html

相关文章

  • json文件编辑功能
    1Json格式JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。它基于ECMAScript(EuropeanComputerManufacturersAssociation,欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。JSON在2001年由DouglasCrockford提出,......
  • Java后端02(jsp)
    jsp​ servlet是无法将后端获取的数据传递给html页面的,无法再servlet中通过转发或者是重定向的方式,给html页面传递响应的后端数据,servlet中由于拼接过于繁琐,是不适合写html的因此引入了jsp,既可以编写html标签,也可以写Java代码,<dependency><groupId>javax.serv......
  • .eslintrc.js 文件内容配置
    以vue项目为例,主要两个文件,1是.eslintrc.js文件(配置),2是.eslintignore(忽略不需要匹配的文件).eslintrc.js 1//ESlint检查配置2module.exports={3root:true,4parserOptions:{5parser:'babel-eslint',6sourceType:'module'7......
  • 【SpringBoot学习】1、SpringBoot 配置 jsp 模板引擎
    springboot整合jsp页面创建springboot项目就不废话了。在原来的基础上直接加东西就可以了1、添加jsp支持的jar包<!--servlet依赖--><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><scope>provid......
  • RTSP流媒体服务器LntonNVR(源码版)平台前端打包出现“UglifyJsPlugin”报错的问题解决
    LntonNVR既有软件版也有硬件版,平台基于RTSP/Onvif协议将前端设备接入,可实现的视频能力有视频监控直播、录像、视频转码分发、检索与回放、云存储、智能告警、国标级联等。平台可将接入的视频流进行转码分发,对外输出的视频流格式包括RTSP、RTMP、HTTP-FLV、WS-FLV、HLS、WebRTC等。......
  • 全国各乡镇的边界数据,json格式适配echarts;
    湖南省的数据现有,联系我获取(免费、帮我看一下小程序);其他省份可通过联系我用脚本获取(要手动输入验证码),或者网站获取(tips:每个区县需要一个个手动下载,且每个下载需要输入验证码):https://www.poi86.com/ ......
  • js 计算加减乘除导致精度丢失
    (function(){varROOT=this;varDECIMAL_SEPARATOR='.';//DecimalvarDecimal=function(num){if(this.constructor!=Decimal){returnnewDecimal(num);}if(numinstanceofDecimal){......
  • web前端技能方法总结(css、js、jquery、html)(2)
    创建链接块display:block;列表样式在一个无序列表中,列表项的标志(marker)是出现在各列表项旁边的圆点。在有序列表中,标志可能是字母、数字或另外某种计数体系中的一个符号。要修改用于列表项的标志类型,可以使用属性list-style-type:ul{list-style-type:square;}1上面的声明把......
  • 关于js toFixed 失真的问题
    不精准原因:下面我们来说一下浮点数运算产生误差的原因:(拿0.1+0.2=0.30000000000000004进行举例)首先,我们要站在计算机的角度思考0.1+0.2这个看似小儿科的问题。我们知道,能被计算机读懂的是二进制,而不是十进制,所以我们先把0.1和0.2转换成二进制看看:0.1=>0.00011001100......
  • 遇到:nodejs unhandledPromiseRejectionWarning 错误应该如何解决
    遇到"unhandledPromiseRejectionWarning"错误是因为在Node.js中,一个Promise被rejected了,但是没有被处理(handled)。这可能是因为你没有使用适当的错误处理机制,导致Promise的rejected状态没有被捕获。要解决这个问题,你可以考虑以下几个步骤:使用catch方法捕获错误:在你的......