2010-06-03 133 views
1

我使用php,mysql,jquery。锁定保存按钮一段时间

当用户点击保存我去后端并保存数据并显示响应。一旦显示成功,我需要禁用保存按钮说1分钟。我该怎么做。?

这里是马代码

$(document).ready(function() { 

if ($.cookie('<?php echo $userId ?><?php echo $product ?><?php echo $alias ?>agreedisabledTime') > 0) { 


    var remainingTime = (new Date()).getTime() - $.cookie('<?php echo $userId ?><?php echo $product ?><?php echo $alias ?>agreedisabledTime'); 


if (remainingTime < <?php echo $timer ?>) { 
    //if (remainingTime < 7200) { 
     $('#agree').attr('disabled', 'disabled'); 
     $('#disagree').attr('disabled', 'disabled'); 
     setTimeout(function() { $('#agree').attr('disabled', ''); }, remainingTime); 
     setTimeout(function() { $('#disagree').attr('disabled', ''); }, remainingTime); 

    } 
    } 

$('#agree').click(function() 
{ 
$('#response').show(); 
$.post('/all_include_files/increment.php',{update:'agree',product:"<?php echo $product?>",alias:"<?php echo $alias ?>"},function(data) 
{ 
if(data.indexOf('ERROR') < 0) 
{ 
$('#response').hide(); 
$('.agree_number').html(data); 
alert('Thanks for your esteemed opinion'); 
$('#agree').attr('disabled', 'disabled'); 
$('#disagree').attr('disabled', 'disabled'); 

setTimeout(function() { $('#agree').attr('disabled', ''); }, "<?php echo $timer ?>"); 
setTimeout(function() { $('#disagree').attr('disabled', ''); }, "<?php echo $timer ?>"); 

$.cookie('<?php echo $userId ?><?php echo $product ?><?php echo $alias ?>agreedisabledTime', (new Date()).getTime()); 
} 
else 
{ alert(data); } 
}); 

}); 

}); 

其中$定时器设置为120000

+0

在阅读此代码时跳出来的唯一东西是行'setTimeout(function(){$('#agree')。attr('disabled','');},“<?php echo $ timer?>“);'和'setTimeout(function(){$('#disagree')。attr('disabled','');},”<?php echo $ timer?>“);'因为块'“<?php echo $ timer?>”''有引号。否则,它会通读,就像它应该按预期工作一样......我也鼓励你将这四条重复多次的行转换成它自己的语句,防止错误和复制粘贴错误。它也会缩短代码行数... – jcolebrand 2010-06-04 15:49:09

+0

尝试'函数setDisabled(timeValue){$('#agree')。attr('disabled','disabled'); $('#disagree')。attr('disabled','disabled'); setTimeout(function(){$('#agree')。attr('disabled','');},timeValue); setTimeout(function(){$('#disagree')。attr('disabled','');},timeValue); }'分别用'setDisabled(remainingTime);'和'setDisabled(<?php echo $ timer?>);' – jcolebrand 2010-06-04 15:50:18

+0

〜你也许会发布哪个部分仍然不工作, – jcolebrand 2010-06-04 15:54:05

回答

2
1秒

禁用按钮:

if (success) { 
$('#buttonid').attr('disabled', 'disabled'); 
setTimeout(function() { $('#buttonid').attr('disabled', ''); }, 1000); 
} 

编辑有关跟踪浏览器的重新加载
您可以使用jQuery插件轻松访问cookie:http://plugins.jquery.com/project/cookie

if (success) { 
$('#buttonid').attr('disabled', 'disabled'); 
setTimeout(function() { $('#buttonid').attr('disabled', ''); }, 1000); 
$.cookie('disabledTime', (new Date()).getTime()); 
} 

然后在加载DOM阅读:

$(document).ready(function() { 
    if ($.cookie('disabledTime') > 0) { 
    var remainingTime = (new Date()).getTime() - $.cookie('disabledTime'); 
    if (remainingTime > 0) { 
     $('#buttonid').attr('disabled', 'disabled'); 
     setTimeout(function() { $('#buttonid').attr('disabled', ''); }, remainingTime); 
    } 
    } 
}); 

请注意,我没有测试这一点,但你的想法

+0

当他刷新/(关闭 - >打开)他的浏览器时,计时器是否仍然活动。 – Hacker 2010-06-03 15:17:06

+0

@pradeep:不,执行环境将在页面刷新时重置。 – 2010-06-03 15:18:58

+0

确定在浏览器关闭后忘记。我可以使用jquery设置会话/ cookie – Hacker 2010-06-03 15:33:58

1

,而不是禁用它一段时间,我将在完成该命令时使用回调来启用按钮,并在启动命令后将其禁用。我还记得如果发生错误时启用它,并向用户弹出一个错误消息,说明它失败,并且重复失败可能意味着系统处于脱机状态或出现错误。

+0

+1如果他希望能够在第一次请求完成后立即再次保存,则更好的方法。但它可能是另一个用例 – baloo 2010-06-03 15:24:09

+0

@baloo〜是的,我知道,但我认为很明显,一个保存按钮会被重复调用,并且有一些机制会说“我还在保存!”总是有帮助的。微软通常会像其他人一样放置一个图标或更改光标,而保存到硬盘通常“足够快”以至于用户不会注意到,我们应该始终为状态更改指令的通知提供可视指示器,是的?所以我同意,可能不是他的用例,但我认为我会添加一些教育材料。回顾这个问题让我相信在这一点上它是有帮助的;) – jcolebrand 2010-06-03 16:02:11