我使用 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 请求设置为同步模式,但这会阻止整个应用程序做任何事情,这也不是我的本意(即你可以使用其他切换开关,那会很好)。
其他人如何处理这种情况?'
最佳答案
一种方法是使用 .one()
并在成功回调时重新绑定(bind)事件。
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);
});
关于javascript - 处理只能同步发生的事件的最佳实践,但其他事情仍然可以异步进行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5413692/