1

日付ボックスの値が変更されると、下のボタンが有効になります。うまくいかないのはなぜですか?

var sbutton = app.createButton('Set Alert').setId('sbutton').setPixelSize(250,    25).setEnabled(true);

// Button to be enabled only after date is set
var buttonenabler = app.createClientHandler().forTargets(sbutton).setEnabled(true);
eventdt.addValueChangeHandler(buttonenabler);

ここでコードを確認してください https://script.google.com/d/1H6DLb8L6Qd3g55Dzn_A7ed61QvM_OcrLINDfya1i1h7JAyV_jLH7nmcq/edit

4

1 に答える 1

1

最初に、ボタンは作成時にすでに有効になっています ( var sbutton = app.createButton('Set Alert')....setEnabled(true);)。つまり、ハンドラが実行されても、ボタンは有効なままです。日付ボックス コントロール値の変更で無効化されたボタンを有効にする方法を示す簡単なデモは次のとおりです。

function doGet(e) {
  var app = UiApp.createApplication();
  var date = app.createDateBox();
  var btn = app.createButton('Test').setEnabled(false);
  var handler = app.createClientHandler().forTargets(btn).setEnabled(true);
  date.addValueChangeHandler(handler);
  app.add(date);
  app.add(btn);
  return app;
}

更新:私はあなたのコードを見直しました。GASのバグのようです。setFormat関数呼び出しがオブジェクトに追加されると、問題が発生しDateBoxます。問題を再現する次のコードを参照してください。最初の日付ボックスの値を変更する場合、最初のボタンが有効になります。2 番目の日付ボックスの値を変更する場合、2 番目のボタンは有効になりません。違いはsetFormat通話だけです。バグが課題トラッカーに送信され、回避策としてsetFormatコード内の呼び出しにコメントを付けることができます。

function doGet(e) {
  var app = UiApp.createApplication();
  var date = app.createDateBox();
  var dateBug = app.createDateBox().setFormat(UiApp.DateTimeFormat.DATE_TIME_MEDIUM);
  var btn = app.createButton('Test').setEnabled(false);
  var btnBug = app.createButton('Test Bug').setEnabled(false);
  var handler = app.createClientHandler().forTargets(btn).setEnabled(true);
  var handlerBug = app.createClientHandler().forTargets(btnBug).setEnabled(true);
  date.addValueChangeHandler(handler);
  dateBug.addValueChangeHandler(handlerBug);
  app.add(date);
  app.add(btn);
  app.add(dateBug);
  app.add(btnBug);
  return app;
}
于 2012-09-08T12:07:45.507 に答える