使用UiApp从表单收集数据,但我让用户双击提交按钮。这会运行doPost两次。当然,他们必须快速点击强大才能让它实际发布两次,但它会发生。
我的问题是:有没有人有禁用提交按钮的经验,比如onMouseUp?有一个更好的方法吗?我被告知要警惕为按钮添加多个onClick处理程序,因为它可能不稳定。有什么稳定的解决方案吗?
我必须使用提交按钮,因为表单中有文件上传。
答案 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);