日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

js节流函数和js防止重复提交的N种方法

發布時間:2025/3/11 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 js节流函数和js防止重复提交的N种方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

應用情景

經典使用情景:js的一些事件,比如:onresize、scroll、mousemove、mousehover等;

還比如:手抖、手誤、服務器沒有響應之前的重復點擊;

這些都是沒有意義的,重復的無效的操作,設置對整個系統的影響還可能是致命的,所以我們要對重復點擊的事件進行相應的處理!

?

節流函數

所謂的節流函數顧名思義,就是某個時刻限制函數的重復調用。

同樣節流函數也是為了解決函數重復提交的問題,而防止重復提交的方法,不止節流函數一種實現。

?

方法匯總

本文整理了我在工作實踐當中,覺的防止js重復提交,比較好用的方法,在這里和大家分享一下。

一、setTimeout + clearTimeout(節流函數)

  本文提供兩種實現方式:普通節流函數和閉包節流函數

二、設定flag/js加鎖

三、通過disable

四、添加浮層比如loading圖層防止多次點擊

?

具體實現

一、setTimeout + clearTimeout(節流函數)

方式一:閉包節流函數(可傳遞多個參數)

/*** 閉包節流函數方法(可傳參數)* @param Function fn 延時調用函數* @param Number delay 延遲多長時間* @return Function 延遲執行的方法*/ var throttle = function (fn, delay) {var timer = null;return function () {var args = arguments; //參數集合 clearTimeout(timer);timer = setTimeout(function () {fn.apply(this, args);}, delay);} }/*** 要執行的方法* @param String name 傳遞的參數*/ function postFun(name) {document.writeln("名字:" + name); }//================測試部分 => 【1s重復點擊10次】 var t = throttle(postFun, 1000); var ejector = setInterval(() => {t("tiger"); }, 100);setTimeout(() => {clearInterval(ejector); }, 1000);

執行結果:

方式二:普通節流函數方法

/*** 普通節流函數方法* @param Function fn 延時調用函數* @param Number delay 延遲多長時間*/ function throttle(fn, delay) {if (fn._id) {clearTimeout(fn._id);}fn._id = window.setTimeout(() => {fn();fn._id = null;}, delay); }/*** 要執行的方法*/ function postFun() {document.writeln(new Date().getTime()); }//================測試部分 => 【1s重復點擊10次】 var interval = setInterval(() => {throttle(postFun, 1000); }, 100);setTimeout(() => {clearInterval(interval); }, 1000);

執行結果:

二、設定flag/js加鎖

var lock = false; jQuery("#submit").on('click', function () {if (lock) {return false;}jQuery.post(url, data, function (response) {//TODO:業務代碼lock = false;}); });

?

總結

前兩種方式實現起來比較方便,而后兩種實現起來相對比較繁瑣,如果是為了防止事件的多次觸發,建議使用閉包,如果是表單提交,適度使用后兩種比較穩妥。

?

?

?

?

?

?

總結

以上是生活随笔為你收集整理的js节流函数和js防止重复提交的N种方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。