系统中出现了一些问题,仔细查询日志后发现在短时间内用户切同一个单好几次,仔细想想就知道应该是用户连续点击的缘故。当然跟我后台判断的疏漏有关系,但是我认为前台也应该做一些限制措施比较好。
基本的思路是声明一个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]就避免了因为没有声明变量而报错了。