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

这篇具有很好参考价值的文章主要介绍了js监听input输入事件及使用防抖封装函数处理的实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

循序渐进:

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

<input id="search" /> //需要监听的dom

//js实现(介绍两种方式)
//方式一:利用input的oninput输入事件实现输入监听
let inputChange1 = document.getElementById("search")//获取inputDom
    inputChange1.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")//获取inputDom
    inputChange2.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 = null
        let isImmediate = false//通过改变量控制函数是否立即执行
        //返回一个函数
        return function () {
            let _this = this//获取input的this
            let args = arguments  //接收函数参数
            // 返回的变量,让函数只执行最后一次
            if (timer) {
                clearInterval(timer)   //删除上一次定时器
            }
            if (immediate && !isImmediate) {//第一次是否需要立即执行 当immediate和isImmediate 都为一个值时回立即执行
                func.apply(_this, args)
                isImmediate = true//使函数下次不会立即执行使其延迟
            } else {
                timer = setTimeout(function () {//将定时器声明为变量timer
                    func.apply(_this, args)//如果处理函数需要用到input的this就通过这个apply从新绑定this,不绑定的话treeSearch函数this指向的是window(直接使用下面的func()就行),
                    // func()//外部传入的函数 
                    isImmediate = true//使函数下次不会立即执行使其延迟
                }, wait)//延迟执行时间
            }
        }
    }
3.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 id="search" />
</body>
<script>
    let search = document.getElementById("search")//获取inputDom
    // 需要防抖处理的函数
    const treeSearch = function () {
        // 逻辑处理
        console.log("通过绑定inputThis得到的value:", this.value);//通过绑定this可以更加方便的使用当前监听的input的属性
        let searchValue = document.getElementById("search").value//不重新绑定this就得重新通过获取监听dom的方式拿到需要的属性
        // console.log(searchValue);//不重新绑定this获取监听dom的方式拿到需要的属性方式
    }
    //oninput监听input框的输入事件
    search.oninput = debounce(treeSearch, 2000, true)
    /**
     * 防抖函数的封装
     * @param func 需要防抖处理的函数
     * @param wait 等待时间 默认赋值了1秒
     * @immediate 第一次是否需要立即执行 boolean值 默认为 false
     * 
     **/
    function debounce(func, wait = 1000, immediate = false) {
        // 定义一个变量来记录上一次的定时器函数的状态
        let timer = null
        let isImmediate = false//通过改变量控制函数是否立即执行
        //返回一个函数
        return function () {
            let _this = this//获取input的this
            let args = arguments  //接收函数参数
            // 返回的变量,让函数只执行最后一次
            if (timer) {
                clearInterval(timer)   //删除上一次定时器
            }
            if (immediate && !isImmediate) {//第一次是否需要立即执行 当immediate和isImmediate 都为一个值时回立即执行
                func.apply(_this, args)
                isImmediate = true//使函数下次不会立即执行使其延迟
            } else {
                timer = setTimeout(function () {//将定时器声明为变量timer
                    func.apply(_this, args)//如果处理函数需要用到input的this就通过这个apply从新绑定this,不绑定的话treeSearch函数this指向的是window(直接使用下面的func()就行),
                    // func()//外部传入的函数 
                    isImmediate = true//使函数下次不会立即执行使其延迟
                }, wait)//延迟执行时间
            }
        }
    }

</script>

</html>

效果图:

input监听,js,javascript,前端,jquery

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

有问题请联系wx:urbaneBinA文章来源地址https://www.toymoban.com/news/detail-529089.html

到了这里,关于js监听input输入事件及使用防抖封装函数处理的实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • uniapp中的input,输入input回车事件和输入input事件

    data定义 methods方法 实现效果--车辆信息点击搜索框实现,当输入值!==‘’--------实现搜索界面,点击键盘回车------------实现车辆信息界面 全部代码

    2024年02月11日
    浏览(27)
  • vue表单中输入框事件的使用@input、@keyup.enter、@change、@blur

    1、@input(v-on:input) 此触发方法适合在查询条件或实时规则校验中使用。 2、@keyup.enter 此触发方法与v-on:input方法区别在于:input事件是实时监控,每次输入都会触发调用,而@keyup.enter则是在键盘点击回撤按键触发,且在手机端则需要点击输入键盘上的确定按键触发。 3、@cha

    2024年02月15日
    浏览(27)
  • uni-app:监听数据变化(watch监听、@input事件)

    方法一:文本框监听,使用 @input 事件 方法二:使用watch监听属性(很好解决了文本框中数据非手输时监听不到数据变化)

    2024年02月10日
    浏览(31)
  • vue项目使用js监听浏览器关闭、刷新、后退事件

    在项目的某些页面中,在执行某些接口调用过程的时候,如果用户选择刷新、关闭或者后退浏览器。有可能会造成接口被阻断,所以可能你会需要js监听浏览器关闭、刷新、后退事件,在进行这些操作的时候给个提示。如下图: end~

    2024年02月16日
    浏览(30)
  • 微信小程序全局封装防抖节流函数

    什么是防抖节流? 防抖:  简单来说就是指触发事件后在  n  秒内函数只能执行一次(输入框搜索自动补全事件、频繁点赞和取消点赞、提交事件等等) 节流:  简单来说就是指连续触发事件但是在  n  秒中只执行一次函数(发送验证码、表单验证、鼠标移动事件等等)

    2024年01月25日
    浏览(32)
  • angular 子组件ngOnChanges监听@input传入的输入属性

    在进入主题之前,先了解一下angular的生命周期。 生命周期 钩子分类 指令与组件共有的钩子 ngOnChanges ngOnInit ngDoCheck ngOnDestroy 组件特有的钩子 ngAfterContentInit ngAfterContentChecked ngAfterViewInit ngAfterViewChecked 生命周期钩子的作用及调用顺序 ngOnChanges - 当数据绑定输入属性的值发生变

    2024年02月12日
    浏览(30)
  • jq——监听input组件type=“radio“单选框的change事件——基础积累

    jq的基操,但是由于本人jq操作dom不熟悉,用vue习惯了,所以还是要记录一下jq的基操,多多积累,多多收获。 1.html代码 2.css代码 3.js代码 完成!!! 多多积累,多多收获!!! 1. attr(): 作用:获取/设置元素的属性 //获取北京节点的name属性值 var bj = $(“#bj”).attr(“name”);

    2024年02月11日
    浏览(41)
  • 前端面试题-js-new关键字-this指向-js事件流-防抖节流

    1.创建一个简单的空对象 2.原型的绑定,确定对象O的原型链 3.绑定this对象为O,传入参数;执行Person构造函数,进行属性和方法的赋值操作 4.返回结果 普通函数的this指向 函数的this指向有一个基本的原则,谁调用的函数,函数的this就指向谁,否则指向全局 箭头函数的this指向

    2024年01月25日
    浏览(36)
  • uniapp监听扫码枪键盘事件|无输入框式监听

    一般的扫码枪通过USB或蓝牙连接手机或电脑,充当的是一个外接设备。当扫码后,扫码枪会自动识别内容,然后向连接的电脑或手机发送键盘事件keydown或keyup。 input输入框式 如果页面上有input输入框就很简单,直接聚焦input,然后扫码,input框会自动填充内容,并自动产生回车

    2024年02月11日
    浏览(29)
  • uni-app - 实现监听路由跳转,每次跳转的时候都能触发的事件(当页面路由发生变化时,触发一个封装好的请求接口或普通功能函数)全端兼容,高效简洁无 BUG 详细教程

    当用户点击任意页面时(路由发生变化),自动执行一个函数,调用接口请求数据、做任何事情。 由于涉及到全部页面,必须采用统一的入口和统一的执行函数,不可能一个页面写一次!! 基于这个需求,本文实现了 全局统一监听路由跳转,当页面发生变化时自动触发某个

    2024年02月11日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包