当我点击一个按钮时,click事件处理程序执行一个代码。如果错误(如果浏览器挂起)我点击按钮两次代码被执行两次。我不希望这发生。 有什么建议可以阻止它吗?
我想我应该使用计划或计时器,但我不确定
下面是代码:
public void onSendButtonClicked() {
disableButtons();
eventBus.fireEvent(new SendEmcsDeclarationEvent(getDeclaration(), getMsgType()));
}
答案 0 :(得分:1)
你可以 - 正如阿卜杜拉所说 - 用
禁用/启用GWT中的每个小部件 widget.setEnable(false)
和
widget.setEnable(true)
。
如果你想锁定整个屏幕,请在按下按钮后显示模态弹出窗口,然后在代码完成后隐藏它。
public void onSendButtonClicked() {
myProgessBar.show();
eventBus.fireEvent(new SendEmcsDeclarationEvent(getDeclaration(), getMsgType()));
myProgressBar.hide();
}
如果您正在使用异步调用,则必须隐藏回调中的progessbar。在这种情况下,finally命令可能在执行回调之前执行。在您的情况下,创建一个ShowProgressBarEvent和HideProgressbarEvent可能是个好主意,这样您就可以在整个应用程序中使用进度条。
如果您正在使用小部件库f.e。:GXT,您会发现可以使用ProgressBar。
希望有所帮助。
答案 1 :(得分:0)
我能想到的最好的方法是启用/禁用按钮本身,以确保在上一次调用完成之前不会再次调用处理程序中的代码。
public void onSendButtonClicked()
{
try
{
disableButtons();
eventBus.fireEvent(new SendEmcsDeclarationEvent(getDeclaration(), getMsgType()));
}
catch (Exception ex)
{
throw ex;
}
finally
{
enableButtons();
}
}
答案 2 :(得分:0)
当我创建一个按钮时,我总是添加一个动画gif(ajaxloader)。
单击按钮时,我使按钮不可见,ajaxloader可见。 当动作完成后,我使ajaxloader不可见,按钮可见。
通过这种方式,用户可以获得一些正在发生的事情的视觉反馈(禁用按钮时没有得到的结果),而不是整个应用程序被阻止(作为模态),这是使用ajax的优点之一