0

我正在 UiApp 中创建一个表单来收集用户数据。根据他们在页面上的答案,我需要转到基于页面的答案。假设我有三页。用户完成第一页。我使用一个按钮和服务器处理程序来调用一个运行的函数和 if 语句,例如:

if(value1 == s1 && value2 == s2){
app.getElementById('page1').setVisible(false);
app.getElementById('page2').setVisible(true);
}

这工作正常。我在第二页。从那里单击下一个按钮并调用一个syncText'函数,该函数将使用此方法加载用户数据:如何允许用户在提交表单之前查看答案?

都好。当我在第一页并且我需要转到第三页和 syncText 时,问题就出现了。

if( value1 != s1){
app.getElementById('page1').setVisible(false);
app.getElementById('page3').setVisible(true);
syncText()
}

这不起作用。如何在 Google 的 UiApp 的 If 语句中调用函数?

我知道我可以简单地将函数重写为 if 语句,但我的真实形式要复杂得多,我想避免重复自己。有什么帮助吗?


更新:所以看起来函数正在被调用,但它无法从表单中找到值。如何将表单值输入此函数?

这是一个完整的示例代码:

function doGet(e){
var app = UiApp.createApplication();
var appPanel = app.createVerticalPanel();
var form = app.createFormPanel();
var panel1 = app.createGrid(4,5).setId('panel1');

 var firstNameLabel = app.createLabel("First Name:");
var firstName = app.createTextBox().setName('firstName').setId('firstName');
var lastNameLabel = app.createLabel("Last Name:");
var lastName = app.createTextBox().setName('lastName').setId('lastName');
var emailLabel = app.createLabel('Your Email');
var email = app.createTextBox().setName('email').setId('email');
 var testing = app.createServerHandler('testing').addCallbackElement(form);

var button1 = app.createButton('Go to Review');
 var info1 = app.createLabel("Please Enter First Name")
.setVisible(false)
.setStyleAttribute('color', 'red');
 var info2 = app.createLabel("Please Enter Last Name")
 .setVisible(false)
 .setStyleAttribute('color', 'red');
var info3 = app.createLabel("Please Enter Email")
.setVisible(false)
 .setStyleAttribute('color', 'red');

panel1.setWidget(0,0, firstNameLabel);
panel1.setWidget(0,1, firstName);
panel1.setWidget(0,2, lastNameLabel);
panel1.setWidget(0,3, lastName);
panel1.setWidget(1,1, info1);
panel1.setWidget(1,3, info2);
panel1.setWidget(2,0, emailLabel);
panel1.setWidget(2,1, email);
panel1.setWidget(2,3, button1);
panel1.setWidget(3,1, info3);

app.add(form);
appPanel.add(panel1);
form.add(appPanel);


var panel2 = app.createGrid(4,5).setId('panel2').setVisible(false);
var reviewFirstNameLabel = app.createLabel("First Name:");
var reviewFirstName = app.createLabel().setId('reviewFirstName');
var reviewLastNameLabel = app.createLabel("Last Name:");
var reviewLastName = app.createLabel().setId('reviewLastName');
var reviewEmailLabel = app.createLabel('Your Email:');
var reviewEmail = app.createLabel().setId('reviewEmail');
var submitButton = app.createSubmitButton('Submit');
var button2 = app.createButton('Edit Response');

panel2.setWidget(0,0, reviewFirstNameLabel); 
panel2.setWidget(0,1, reviewFirstName); 
panel2.setWidget(0,2, reviewLastNameLabel);
panel2.setWidget(0,3, reviewLastName);
panel2.setWidget(1,0, reviewEmailLabel);
panel2.setWidget(1,1, reviewEmail);
panel2.setWidget(2,0, button2);
panel2.setWidget(3,0, submitButton);
appPanel.add(panel2);

//
var editResponse = app.createClientHandler()
.forTargets(panel1).setVisible(true)
.forTargets(panel2).setVisible(false);

button1.addClickHandler(testing);
button2.addClickHandler(editResponse);

return app;
}

function syncText(e){
  var app = UiApp.getActiveApplication(); 


  app.getElementById('reviewFirstName').setText(e.parameter.firstName));
  app.getElementById('reviewLastName').setText(e.parameter.lastName);
  app.getElementById('reviewEmail').setText(e.parameter.email);
  app.getElementById('panel1').setVisible(false);
  app.getElementById('panel2').setVisible(true);
  return app;
}


function testing(e){
var app = UiApp.getActiveApplication();
var firstName = e.parameter.firstName;
var lastName = e.parameter.lastName;
var email = e.parameter.email;

if(firstName != ""){
syncText();
 }

错误现在说参数未定义?所有值都形成了测试函数检查,但我似乎无法从 syncText() 中获取值。对获得此功能有任何帮助吗?

4

1 回答 1

0

更好的方法是向每个页面添加类“页面”。

并有一些功能,如
功能 enablePage(page_num)

在其中隐藏每个 .page 对象,然后通过 id 启用必要的一个。

于 2013-01-31T18:57:47.730 回答