使用 UiApp 从表单收集数据,但我让用户双击提交按钮。这运行 doPost 两次。当然,他们必须快速点击才能让它实际发布两次,但它确实发生了。
我的问题是:有没有人有禁用提交按钮的经验,比如使用 onMouseUp?有一个更好的方法吗?我被告知要小心向按钮添加多个 onClick 处理程序,因为它可能不稳定。有什么稳定的解决方案吗?
我必须使用提交按钮,因为表单中有文件上传。
使用 UiApp 从表单收集数据,但我让用户双击提交按钮。这运行 doPost 两次。当然,他们必须快速点击才能让它实际发布两次,但它确实发生了。
我的问题是:有没有人有禁用提交按钮的经验,比如使用 onMouseUp?有一个更好的方法吗?我被告知要小心向按钮添加多个 onClick 处理程序,因为它可能不稳定。有什么稳定的解决方案吗?
我必须使用提交按钮,因为表单中有文件上传。
我遇到过这个问题,自从 Google 推出 ClientHandlers 以来,就有了一条出路。只需将客户端处理程序添加到您的提交按钮禁用它(并记住在完成服务器处理程序函数或 doPost 后启用它)
var plswait = app.createClientHandler().forEventSource().setEnabled(false).setText('Please wait...');
var btnSubmit = app.createSubmit().addMouseDownHandler(plswait);
是我的最爱。
我遇到了同样的问题,但为了解决这个问题,我创建了第二个“假”按钮,当单击提交按钮时该按钮变为可见,同时“真实”提交按钮的可见性设置为假。这是基本代码:
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);
第一个答案对我不起作用,因为 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);