-1

次のコードは、ボタンがクリックされたときに、テキストボックスにある true/false の逆をテキストボックスに書き込む必要がありますが、正しく機能しません。ある方法では正しく動作しますが、他の方法では正しく動作しません (動作するのは最後に定義された ClickHandler です)。私もvalidateNotMatchesを使ってみましたが、喜びはありません。

テキストボックスの代わりにラベルのテキストが更新されるようにコードを変更すると、問題なく動作します。

2 つのボタンを使用するなどの提案された回避策は認識していますが、何か間違っているのか、それとも GAS のバグのように見えるのかを知りたいだけです。ありがとう。

function doGet(e)
{
  var app = UiApp.createApplication();

  var tb = app.createTextBox().setText('true');
  var button = app.createButton('button');
  var label = app.createLabel().setText('-');

  button.addClickHandler(app.createClientHandler()
                  .validateMatches(tb, 'true')
                  //.forTargets(label).setText('false')
                  .forTargets(tb).setText('false')
                 );
  button.addClickHandler(app.createClientHandler()
                  .validateMatches(tb, 'false')
                  //.forTargets(label).setText('true')
                  .forTargets(tb).setText('true')
                 );

  return app.add(app.createHorizontalPanel().add(tb).add(button).add(label));
}
4

1 に答える 1

2

バグではありません...両方のイベントが発生します。検証は、イベントが発生したときの状態ではなく、ウィジェットの現在の状態で行われるため、「false」に反転した後、2 番目のハンドラーが検証して「true」に戻します。

于 2012-12-20T23:48:34.133 に答える