欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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)擊或者輸入只會執(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ù)下次不會立即執(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ù)下次不會立即執(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ù)下次不會立即執(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ù)下次不會立即執(zhí)行使其延遲
                }, wait)//延遲執(zhí)行時(shí)間
            }
        }
    }
</script>
</html>

效果圖:

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

總結(jié)

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

相關(guān)文章

  • 小程序如何構(gòu)建骨架屏

    小程序如何構(gòu)建骨架屏

    最近在移動(dòng)端上面看到不同于菊花圖的加載方式,就是這篇文章需要分享的Skeleton Screen,中文稱之為"骨架屏",下面我們來簡單了解一下吧
    2019-05-05
  • JavaScript中的類型檢查

    JavaScript中的類型檢查

    本文給大家介紹了JavaScript中的類型檢查的一些知識點(diǎn),整理的非常詳細(xì),推薦給大家,希望對大家學(xué)習(xí)JavaScript能夠所幫助
    2020-02-02
  • js實(shí)現(xiàn)時(shí)間顯示幾天前、幾小時(shí)前或者幾分鐘前的方法集錦

    js實(shí)現(xiàn)時(shí)間顯示幾天前、幾小時(shí)前或者幾分鐘前的方法集錦

    這篇文章主要介紹了js實(shí)現(xiàn)時(shí)間顯示幾天前、幾小時(shí)前或者幾分鐘前的方法,實(shí)例匯總分析了時(shí)間顯示格式轉(zhuǎn)換的常用思路與技巧,需要的朋友可以參考下
    2015-05-05
  • JS的拖拽屬性draggable詳解

    JS的拖拽屬性draggable詳解

    這篇文章主要介紹了JS的拖拽屬性draggable詳解,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • 關(guān)于JavaScript奇怪又實(shí)用的六個(gè)姿勢

    關(guān)于JavaScript奇怪又實(shí)用的六個(gè)姿勢

    這篇文章主要給大家介紹了關(guān)于JavaScript奇怪又實(shí)用的六個(gè)姿勢,這些技巧和建議是我平常在開發(fā)項(xiàng)目上會用到的,希望能讓大家學(xué)到知識,需要的朋友可以參考下
    2021-10-10
  • 利用Bootstrap實(shí)現(xiàn)表格復(fù)選框checkbox全選

    利用Bootstrap實(shí)現(xiàn)表格復(fù)選框checkbox全選

    Bootstrap相信應(yīng)該不用多介紹,來自 Twitter,是目前最受歡迎的前端框架。這篇文章主要給大家介紹了如何利用Bootstrap實(shí)現(xiàn)表格中的checkbox復(fù)選框全選效果,文中給出詳細(xì)的介紹及完整的實(shí)例代碼,相信對大家的理解和學(xué)習(xí)具有一定的參考借鑒價(jià)值,下面來一起看看吧。
    2016-12-12
  • js操作IE瀏覽器彈出瀏覽文件夾可以返回目錄路徑

    js操作IE瀏覽器彈出瀏覽文件夾可以返回目錄路徑

    這篇文章主要介紹了js操作IE瀏覽器彈出瀏覽文件夾并可以返回目錄路徑,需要的朋友可以參考下
    2014-07-07
  • JavaScrip數(shù)組去重操作實(shí)例小結(jié)

    JavaScrip數(shù)組去重操作實(shí)例小結(jié)

    這篇文章主要介紹了JavaScrip數(shù)組去重操作,結(jié)合實(shí)例形式總結(jié)分析了javascript針對數(shù)組的遍歷、判斷、去重等相關(guān)操作技巧,需要的朋友可以參考下
    2019-06-06
  • canvas實(shí)現(xiàn)圖像布局填充功能

    canvas實(shí)現(xiàn)圖像布局填充功能

    這篇文章主要為大家詳細(xì)介紹了canvas實(shí)現(xiàn)圖像布局填充功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • electron中preload.js文件的用法小結(jié)

    electron中preload.js文件的用法小結(jié)

    preload.js文件在Electron應(yīng)用中起著橋梁的作用,使得在保持安全的同時(shí),渲染進(jìn)程可以訪問主進(jìn)程的功能,保持渲染進(jìn)程與主進(jìn)程隔離的同時(shí),又能使渲染進(jìn)程具有訪問特定Electron API的能力的方法,本文給大家分享electron中preload.js文件的用法,感興趣的朋友一起看看吧
    2024-04-04

最新評論