系統中出現了一些問題,仔細查詢日誌後發現在短時間內用戶切同一個單好幾次,仔細想想就知道應該是用戶連續點擊的緣故。當然跟我後臺判斷的疏漏有關係,但是我認爲前臺也應該做一些限制措施比較好。
基本的思路是聲明一個flag變量,然後點擊後變成true,按鈕動作完了再變回false。不過我的方法很多,而且很多按鈕都是用模板生成的,需要動態生成flag。
function noRepeat(key){
if(!!window[key]){
if(window[key]>4){//重複一定次數發出提醒
window[key] = 1;
top.layer.msg("正在處理中,請不要重複點擊",{icon:0});
}
window[key] ++;
return true;
}
if(typeof(window[key] == "undefined")){//第一次點擊聲明flag
window[key] = 0;
}
window[key]++;
return false;
}
function button1(){
if(noRepeat(arguments.callee.name+"Flag")){//方法名+Flag組成動態flag名
return;
};
$.ajax({
type: "post",
dataType: "json",
url: url,
data: {},
success: function (result) {
window[arguments.callee.name+"Flag"] = 0;
}
});
}
arguments.callee.name就是方法名,一般來說方法名是不會重複的,當然也可以換成其他不會重複的關鍵字。
js可以使用map[key]的方式聲明變量真的十分靈活,特別是寫框架或者模板的時候,有的頁面不會聲明全局變量,在模板中使用window[key]就避免了因爲沒有聲明變量而報錯了。