0

我的条件是我有一个文本框和一个按钮,当用户在文本框中输入内容并按 Enter 键时,我想使用与该按钮相同的处理程序。我看到文本框中有一个名为 addKeyUpHandler 的函数,但该函数似乎只能像下面的示例一样工作。

  // Create handler to mark the input in textBoxB as valid
  var onInvalidInput1 = app.createClientHandler()
      .validateNumber(textBoxB)
      .forTargets(textBoxB).setStyleAttribute("color", "black");

  // Add all the handlers to be called when the user types in the text boxes
  textBoxA.addKeyUpHandler(onInvalidInput1);
4

2 回答 2

2

我认为您不能使用 ClientHandlers 来做到这一点。您当然可以使用 ServerHandlers。给猫剥皮的方法不止一种,但这很管用,所以玩一下这样的东西。在这里,我使用了两种不同的 ServerHandler,一种用于 TextBox,一种用于 Button,并将它们通过管道传递给一个通用的 doAction 函数。您当然可以为它们都使用一个处理程序,但这会增加每个 keyUp 事件发送到服务器的开销,甚至在您知道它是一个有效数字之前。

// Script-as-app template.
function doGet() {
  var app = UiApp.createApplication();

  var textbox = app.createTextBox().setName('textbox');
  app.add(textbox);
  var button = app.createButton('Click Me');
  app.add(button);
  var label = app.createLabel('___').setId('lbl');
  app.add(label);

  // only fire ServerHandler for onKeyUp if it passees validation
  var textBoxHandler = app.createServerHandler('textBoxHandlerFunction').validateNumber(textbox);
  var buttonHandler = app.createServerHandler('buttonHandlerFunction');
  textBoxHandler.addCallbackElement(textbox);
  buttonHandler.addCallbackElement(textbox);

  textbox.addKeyUpHandler(textBoxHandler);
  button.addClickHandler(buttonHandler);

  return app;
}

function textBoxHandlerFunction(e) {
  var app = UiApp.getActiveApplication();
  if(e.parameter.keyCode == 13)
  {
    app = doAction(app, e);
  }
  return app;
}

function buttonHandlerFunction(e) {
  // missing validation that textbox is a number
  return doAction(UiApp.getActiveApplication(), e);
}

function doAction(app, e)
{
  // do your stuff
  app.getElementById('lbl').setText('fired...' + e.parameter.textbox);
  return app;
}
于 2013-01-04T10:51:55.720 回答
0

我终于使用了下面的代码。

function doGet() { 
  var tb_search = myapp.createTextBox().setName('tb_search').setId('tb_search').setWidth(LENGTH_MIDDLE)
  var btn_search = myapp.createButton('Go').setId('btn_search');  

  var h_search = myapp.createServerClickHandler('procSearch');
  h_search.addCallbackElement(tb_search);  
  btn_search.addClickHandler(h_search);      

  var h_tb_keyup = myapp.createServerHandler('procSearch') 
  tb_search.addKeyUpHandler(h_tb_keyup)
}


function procSearch(e) {
  var app = UiApp.getActiveApplication(); 
  // return if the key is not enter.     
  if((e.parameter.eventType=="keyup") && (e.parameter.keyCode != 13))
  {
    return app;
  }
}  
于 2013-01-04T13:13:19.590 回答