關於“keyup”的使用

function throttle(func, wait, mustRun) {  
        var timeout,//timeout 可以放在外面,這樣可以多個時間綁定同個函數。  
        var startTime = new Date();  
  
  
        return function() {  
            var context = this,  
                args = arguments,  
                curTime = new Date();  
  
  
            clearTimeout(timeout);  
            // 如果達到了規定的觸發時間間隔,觸發 handler  
            if(mustRun && (curTime - startTime >= mustRun)){  
                func.apply(context,args);  
                startTime = curTime;  
            // 沒達到觸發間隔,重新設定定時器  
            }else{  
                timeout = setTimeout(function(){
                    func.apply(context,args);
                }, wait);  
            }  
        };  
    };  
// 實際想綁定在 scroll 事件上的 handler  
function realFunc(){  
    console.log("Success");  
}  
// 採用了節流函數  
window.addEventListener('scroll',throttle(realFunc,500,1000));




現在來談一下 keyup.

我們知道 keydown ,是按下去觸發,up是鍵盤彈上來觸發的。

一般我建議是用keyup的。

使用keyup的目的就是在輸入完畢的時候處理一些事情。比如這個例子。

$("input").keyup(function(){

if(this.value.length === 6){

doSomething();

}

});

上面這個例子,沒有使用節流函數,

並且使用了判斷條件,避免每次keyup都執行方法。

咋一看還挺完美的。

實際使用情況中,如果 你按住某個鍵,知道長度等與6,會一下子觸發多個執行函數,因爲它們檢測到 長度都是6。這可不是我們想要的。

而且,如果有多個event都綁定 這個函數的話,也會造成多次執行。

普通的執行操作還行,如果doSomething涉及到 異步操作,訪問接口等 。沒有節流函數將會造成極大的影響。比如ajax失敗,彈出“操作失敗”。萬一多次彈窗,那就是一個災難了


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章