最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

js如何監(jiān)聽input輸入事件及使用防抖封裝函數(shù)處理方法

 更新時(shí)間:2023年07月26日 10:55:35   作者:urbaneBin  
這篇文章主要給大家介紹了關(guān)于js如何監(jiān)聽input輸入事件及使用防抖封裝函數(shù)處理方法的相關(guān)資料,最近有一個(gè)需求,需要我們實(shí)時(shí)監(jiān)聽input輸入框中的內(nèi)容,從而帶來更好的用戶體驗(yàn),需要的朋友可以參考下

js監(jiān)聽input輸入事件及使用防抖封裝函數(shù)處理的實(shí)現(xiàn)

循序漸進(jìn):

1.實(shí)現(xiàn)input框的輸入監(jiān)聽事件:

<input id="search" /> //需要監(jiān)聽的dom

//js實(shí)現(xiàn)(介紹兩種方式)
//方式一:利用input的oninput輸入事件實(shí)現(xiàn)輸入監(jiān)聽
let inputChange1 = document.getElementById("search")//獲取inputDom
    inputChange1.oninput = function(){//監(jiān)聽輸入事件
        console.log("監(jiān)聽到input輸入")//輸出
        let value1 = this.value//拿到輸入的值
        let value2 = document.getElementById("search").value//獲取值的方式二
        console.log(value1,value2)//輸出
    }
//方式二:利用input的oninput輸入事件實(shí)現(xiàn)輸入監(jiān)聽
let inputChange2 = document.getElementById("search")//獲取inputDom
    inputChange2.addEventListener("onpropertychange",function(){
         console.log("監(jiān)聽到input輸入")//輸出
        let value1 = this.value//拿到輸入的值
        let value2 = document.getElementById("search").value//獲取值的方式二
        console.log(value1,value2)//輸出
    })

//jquery實(shí)現(xiàn)(介紹一種)

$("#search").bind("input propertychange",function(){
    console.log("監(jiān)聽到input輸入")
    let value = $("#search").val()//拿到輸入的值
    console.log(value)//輸出
})

2.防抖函數(shù)

防抖函數(shù)的目的:為了限制函數(shù)的執(zhí)行頻率而出現(xiàn),優(yōu)化解決函數(shù)觸發(fā)頻率過高導(dǎo)致延遲及假死卡頓等bug的出現(xiàn)。大多用在查詢和提交功能上。

設(shè)置時(shí)間內(nèi)多次點(diǎn)擊或者輸入只會(huì)執(zhí)行最后一次點(diǎn)擊或者輸入;

代碼:

/**
     * 防抖函數(shù)的封裝
     * @param func 需要防抖處理的函數(shù)
     * @param wait 等待時(shí)間 默認(rèn)賦值了1秒
     * @immediate 第一次是否需要立即執(zhí)行 boolean值 默認(rèn)為 false
     * 
     **/
    function debounce(func, wait = 1000, immediate = false) {
        // 定義一個(gè)變量來記錄上一次的定時(shí)器函數(shù)的狀態(tài)
        let timer = null
        let isImmediate = false//通過改變量控制函數(shù)是否立即執(zhí)行
        //返回一個(gè)函數(shù)
        return function () {
            let _this = this//獲取input的this
            let args = arguments  //接收函數(shù)參數(shù)
            // 返回的變量,讓函數(shù)只執(zhí)行最后一次
            if (timer) {
                clearInterval(timer)   //刪除上一次定時(shí)器
            }
            if (immediate && !isImmediate) {//第一次是否需要立即執(zhí)行 當(dāng)immediate和isImmediate 都為一個(gè)值時(shí)回立即執(zhí)行
                func.apply(_this, args)
                isImmediate = true//使函數(shù)下次不會(huì)立即執(zhí)行使其延遲
            } else {
                timer = setTimeout(function () {//將定時(shí)器聲明為變量timer
                    func.apply(_this, args)//如果處理函數(shù)需要用到input的this就通過這個(gè)apply從新綁定this,不綁定的話treeSearch函數(shù)this指向的是window(直接使用下面的func()就行),
                    // func()//外部傳入的函數(shù) 
                    isImmediate = true//使函數(shù)下次不會(huì)立即執(zhí)行使其延遲
                }, wait)//延遲執(zhí)行時(shí)間
            }
        }
    }

3.input輸入事件和節(jié)流的結(jié)合(點(diǎn)擊事件也是如此)

<!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
    // 需要防抖處理的函數(shù)
    const treeSearch = function () {
        // 邏輯處理
        console.log("通過綁定inputThis得到的value:", this.value);//通過綁定this可以更加方便的使用當(dāng)前監(jiān)聽的input的屬性
        let searchValue = document.getElementById("search").value//不重新綁定this就得重新通過獲取監(jiān)聽dom的方式拿到需要的屬性
        // console.log(searchValue);//不重新綁定this獲取監(jiān)聽dom的方式拿到需要的屬性方式
    }
    //oninput監(jiān)聽input框的輸入事件
    search.oninput = debounce(treeSearch, 2000, true)
    /**
     * 防抖函數(shù)的封裝
     * @param func 需要防抖處理的函數(shù)
     * @param wait 等待時(shí)間 默認(rèn)賦值了1秒
     * @immediate 第一次是否需要立即執(zhí)行 boolean值 默認(rèn)為 false
     * 
     **/
    function debounce(func, wait = 1000, immediate = false) {
        // 定義一個(gè)變量來記錄上一次的定時(shí)器函數(shù)的狀態(tài)
        let timer = null
        let isImmediate = false//通過改變量控制函數(shù)是否立即執(zhí)行
        //返回一個(gè)函數(shù)
        return function () {
            let _this = this//獲取input的this
            let args = arguments  //接收函數(shù)參數(shù)
            // 返回的變量,讓函數(shù)只執(zhí)行最后一次
            if (timer) {
                clearInterval(timer)   //刪除上一次定時(shí)器
            }
            if (immediate && !isImmediate) {//第一次是否需要立即執(zhí)行 當(dāng)immediate和isImmediate 都為一個(gè)值時(shí)回立即執(zhí)行
                func.apply(_this, args)
                isImmediate = true//使函數(shù)下次不會(huì)立即執(zhí)行使其延遲
            } else {
                timer = setTimeout(function () {//將定時(shí)器聲明為變量timer
                    func.apply(_this, args)//如果處理函數(shù)需要用到input的this就通過這個(gè)apply從新綁定this,不綁定的話treeSearch函數(shù)this指向的是window(直接使用下面的func()就行),
                    // func()//外部傳入的函數(shù) 
                    isImmediate = true//使函數(shù)下次不會(huì)立即執(zhí)行使其延遲
                }, wait)//延遲執(zhí)行時(shí)間
            }
        }
    }
</script>
</html>

效果圖:

直接復(fù)制最下面的代碼塊就能看到效果了,如有錯(cuò)誤望大佬能夠指正。

總結(jié)

到此這篇關(guān)于js如何監(jiān)聽input輸入事件及使用防抖封裝函數(shù)處理方法的文章就介紹到這了,更多相關(guān)js監(jiān)聽input輸入事件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

筠连县| 罗定市| 湾仔区| 水城县| 印江| 隆尧县| 兴隆县| 临潭县| 土默特右旗| 池州市| 双江| 万山特区| 邻水| 肇东市| 石河子市| 特克斯县| 镇原县| 修水县| 财经| 获嘉县| 瑞丽市| 昌黎县| 肥东县| 汨罗市| 汉川市| 盐边县| 绵竹市| 赣州市| 青田县| 沂源县| 高邮市| 科技| 康定县| 嵊州市| 南安市| 太仓市| 翼城县| 通道| 荥经县| 嘉荫县| 甘德县|