我有一个基于PHP的Web应用程序,它监视进程的状态并显示具有该状态的页面。用户可以单击页面上的按钮来更新状态。但是,我的服务器上的处理负载非常重,以至于不太频繁地更新状态是不合需要的。因此,我希望在“提交”按钮上限制某人每分钟点击一次(这会刷新页面上显示的状态)。例如,如果有人在12:00:00点击按钮,则他们应该无法再次点击它,直到12:01:00。
点击按钮后,我想在一分钟过后禁用按钮并重新启用它 - 这是我的首选解决方案。
非常感谢。
答案 0 :(得分:5)
只是一个建议,但如果您要通过使用客户端计时器(setTimeout)编写代码来限制提交按钮,那么为什么不一起只删除更新按钮,并以预定义的时间间隔自动更新页面?
以下是jQuery中的一些示例代码(因为jQuery提供了一些很棒的跨浏览器AJAX支持)
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<scrypt type="text/javascript">
$(function(){
// On page load...
updateStatus();
})
function updateStatus(){
$('#status').load('/url/to/status/display.php');
setTimeout(updateStatus, 60000) // 60,000 miliseconds = 1 minute
}
</script>
</head>
<body>
<div id="status">
<!-- whatever is in /url/to/status/display.php will be loaded here -->
</div>
</body>
</html>
答案 1 :(得分:5)
要做这个纯javascript,你可以简单地捕获click事件,禁用按钮并在超时后再次启用它,下面的代码使用jQuery并假设你的按钮有一个id'按钮'(&lt; button id = “按钮”&gt;点击!&lt; / button&gt;或如果是输入:&lt; input type ='button'id =“button”&gt;点击!&lt; / input&gt;)
<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js'></script>
<script type='text/javascript'>
$('#button').click( function(){
$(this).attr('disabled', 'disabled');
setTimeout(enableButton, 1000);
return true; //make sure default click event happens
});
var enableButton = function(){
$('#button').removeAttr('disabled');
}
</script>
你说进度很重,请注意即使人们不能再按一次按钮(如果他们启用了javascript),他们仍然可以禁用javascript并按下按钮尽可能多,或者直接打电话给网址多次。
编辑为脚本添加了完整的HTML
答案 2 :(得分:4)
wtf ...人们是jQuery上瘾。
<input id="btn" type="button" value="click me" onclick="doSomething();"/>
<script>
function doSomething() {
document.getElementById("btn").disabled=true;
setTimeout('document.getElementById("btn").disabled=false;',60000);
// do your heavy stuff here
}
</script>
答案 3 :(得分:2)
使用setTimeout。
答案 4 :(得分:0)
使用underscore.js这很简单:
var func = _.debounce(function(x) {return x * x}, 60000);