0

使用 UiApp 从表单收集数据,但我让用户双击提交按钮。这运行 doPost 两次。当然,他们必须快速点击才能让它实际发布两次,但它确实发生了。

我的问题是:有没有人有禁用提交按钮的经验,比如使用 onMouseUp?有一个更好的方法吗?我被告知要小心向按钮添加多个 onClick 处理程序,因为它可能不稳定。有什么稳定的解决方案吗?

我必须使用提交按钮,因为表单中有文件上传。

4

3 回答 3

0

我遇到过这个问题,自从 Google 推出 ClientHandlers 以来,就有了一条出路。只需将客户端处理程序添加到您的提交按钮禁用它(并记住在完成服务器处理程序函数或 doPost 后启用它)

var plswait = app.createClientHandler().forEventSource().setEnabled(false).setText('Please wait...'); 
var btnSubmit = app.createSubmit().addMouseDownHandler(plswait); 

是我的最爱。

于 2012-09-13T04:30:27.273 回答
0

我遇到了同样的问题,但为了解决这个问题,我创建了第二个“假”按钮,当单击提交按钮时该按钮变为可见,同时“真实”提交按钮的可见性设置为假。这是基本代码:

var button = app.createSubmitButton('Submit').setId("button")
  .setEnabled(false)

var falseButton = app.createButton('Submit').setId("falseButton")
  .setEnabled(false)
  .setVisible(false);

var handler = app.createClientHandler()
    .forTargets(button).setVisible(false)
    .forTargets(falseButton).setVisible(true); 

button.addClickHandler(handler);

panel.add(app.createHorizontalPanel().add(button).add(falseButton);
于 2014-03-17T12:42:07.953 回答
0

第一个答案对我不起作用,因为 MouseDown 处理程序没有让 ServerHandler 运行。但它给了我正确的方向。在添加服务器处理程序之前,我刚刚添加了客户端处理程序以禁用按钮……这似乎可以防止双击。像这样:

  var submitButton = myapp.createButton("Submit");
  var myServerHandler = myapp.createServerClickHandler("myServerHandler");
  var pleaseWait = myapp.createClientHandler().forEventSource().setEnabled(false).setText('submitting...'); 
  submitButton.addClickHandler(pleaseWait);
  submitButton.addClickHandler(myServerHandler);
于 2014-05-21T21:46:34.400 回答