我使用jQuery和设置切换之类的东西,我发现自己写了很多代码,如:
foo.toggleSetting = function() {
var el = $(this);
if(el.data('clicked')) return false; //need to back off if we're already doing something
el.data('clicked',true);
var visible = $(this).is(':visible');
$.ajax({
url: '/update_setting',
data: {'status': visible},
success: function() { el.data('clicked',false); }
});
}
$(function(){
$('#setting_toggle').click(foo.toggleSetting);
});
我试图阻止的是有人发送垃圾邮件,将一个设置切换为向服务器发送大量请求,但这只是让人觉得笨拙。我知道我可以将ajax请求设置为同步模式,但这会阻止整个应用程序做任何事情,这也不是我的意图(即你可以玩其他切换,这样就可以了。)
其他人如何处理这种情况?'
答案 0 :(得分:4)
一种方法是使用.one()
并在成功回调中重新绑定事件。
foo.toggleSetting = function() {
var el = $(this);
var visible = $(this).is(':visible');
$.ajax({
url: '/update_setting',
data: {'status': visible},
success: function() { el.one('click', foo.toggleSetting); }
});
}
$(function(){
$('#setting_toggle').one('click', foo.toggleSetting);
});