1

我正在尝试使用客户端处理程序来验证条目以确保该条目确实是一个数字。因此,例如,如果一个条目包含一个字母,那么我想禁用一个按钮,以便用户无法继续。我已经使用 GUI 构建器构建了一个 GUI,但是如果从 GUI 调用客户端处理程序,特别是 validateNotNumber,它就不起作用。

到目前为止,对于我试图让验证器工作的文本框,我在 GUI 构建器中使用 ID(基本)= 名称(输入字段),对于事件部分,我填写了“按下按键”具有客户端处理程序的函数的名称和文本框所在的表单的名称(在我的例子中是 AbsolutePanel1)。

调用的函数是:

function isitnotnumbers(e) {
var app = UiApp.getActiveApplication();
app.createClientHandler().validateNotNumber(app.getElementById('ThisOdometer'))
.forTargets(app.getElementById('ButtonCalcMPG')).setEnabled(false);
return app;
}; 

该函数确实被称为我已经通过在文本框中按下一个键时显示一条消息来测试它。但是,当按下非数字键时,指定的按钮不会被禁用。

我发现的示例列出了手工编码的 UI 小部件中的验证器,因此我不确定在使用 GUI 构建器时哪里出错了。

那么,我哪里出错了,我该如何解决这个问题?如果 GUI 构建器确实对客户端处理程序有限制(例如使用 HTML 服务),是否有解决方法?

我的其他尝试:

我试图在文本框中添加一个点击处理程序,这是对上面代码的修改:

var app = UiApp.getActiveApplication();  
var handlernumbers = app.createClientHandler()
    .forTargets(app.getElementById('LabelUserMessage'))
    .setText('THe message');
var odobox = app.getElementById('ThisOdometer');
odobox.addClickHandler(handlernumbers);
return app;
4

2 回答 2

1

试试这个:

function isitnotnumbers(e) {
var app = UiApp.getActiveApplication();
app.getElementById('ThisOdometer').addKeyUpHandler(app.createClientHandler().validateNotNumber(app.getElementById('ThisOdometer'))
.forTargets(app.getElementById('ButtonCalcMPG')).setEnabled(false));
return app;
};

编辑:您不需要在单独的函数中使用此代码,只需将以下行添加到您的 doGet() 或主函数中(以便在应用程序启动时仅创建一次处理程序):

app.getElementById('ThisOdometer').addKeyUpHandler(app.createClientHandler().validateNotNumber(app.getElementById('ThisOdometer'))
    .forTargets(app.getElementById('ButtonCalcMPG')).setEnabled(false));
于 2013-01-06T08:39:14.377 回答
0

To answer my own question, I will say that it does not matter as google is deprecating gui builder, and will cease to function after September.

I should, or perhaps I should have started to, learn uiservice or htmlservice.

于 2013-03-26T07:39:59.213 回答