如何停止双击/双重发布表格?

时间:2012-09-12 18:46:54

标签: google-apps-script

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

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

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

3 个答案:

答案 0 :(得分:0)

我遇到了这个问题,自谷歌推出ClientHandlers以来,就有了出路。 只需在提交按钮中添加一个客户端处理程序,禁用它(并记得在完成服务器处理函数或doPost时启用它)

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

是我的最爱。

答案 1 :(得分:0)

我有同样的问题,但为了解决这个问题,我创造了第二个" false"单击提交按钮时可见的按钮,同时"真实"提交按钮可见性设置为false。这是基本代码:

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);

答案 2 :(得分: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);