如何知道哪个UI元素是焦点

时间:2012-06-24 15:50:56

标签: google-apps-script

我有一个文本框的eventhandler函数,它执行以下操作,

  • 搜索用户的联系人并显示与该模式匹配的联系人 文本框

应该为另外两个文本框执行相同的功能。

由于文本框的值是使用“e.parameter.textbox1NAME”获得的,因此我添加了另外两个函数作为事件处理程序,

textbox2.addKeyUpHandler('search2');
textbox3.addKeyUpHandler('search3');

除了

textbox1.addKeyUpHandler('search1');

这三个函数的唯一区别在于使用的模式是否是, “e.parameter.textbox1NAME”或“e.parameter.textbox2NAME”或“e.parameter.textbox3NAME”

我认为这是低效的,有没有办法知道哪个元素调用处理程序或哪个元素是焦点? 感谢

3 个答案:

答案 0 :(得分:1)

您可以使用单个函数并找出从e.parameter.source编辑的文本框。 例如

function onKeyUp(e){
  // Make sure the ID and the name of the widgets are the same.
  var src = e.parameter.source;
  var newValue = e.parameter[src]; 
  // Next steps
}

由于您的大多数问题都是非常基本的,我建议您先在stackoverflow,问题跟踪器和旧的Google Apps脚本论坛上进行一些研究,然后再提出问题。

答案 1 :(得分:0)

如果我理解正确的话,它就像是:我有1-n个盒子,并希望将特定事件的处理程序绑定到它。 解决方案(使用jquery)是为dom对象(框)使用选择器并附加一个处理程序,例如点击这些所有这些:

$('.textboxes').click(function(e){
    console.log(e.currentTarge) // <-- Here current Target is your DOM Object.
})

此引用也绑定到函数副本,因此它将与对象的上下文一起执行。 查看以下站点以获取示例: jquery click eventjquery bind function

干杯 悠闲

答案 2 :(得分:0)

Srik的答案很聪明!我喜欢它,想试一试......这里有一个例子来说明!

function multitext_test() {
  var app = UiApp.createApplication().setHeight('150').setWidth('200');
  app.setTitle("test these textboxes");
  var panel = app.createFlowPanel();
  var txt1 = app.createTextBox().setName('txt1').setId('txt1');
  var txt2 = app.createTextBox().setName('txt2').setId('txt2');
  var txt3 = app.createTextBox().setName('txt3').setId('txt3');
  var label = app.createLabel('type in any of these textBoxes').setId('label')
  app.add(panel.add(txt1).add(txt2).add(txt3).add(label));
  var QHandler = app.createServerHandler("key").addCallbackElement(panel);
  txt1.addKeyUpHandler(QHandler);
  txt2.addKeyUpHandler(QHandler);
  txt3.addKeyUpHandler(QHandler);
//  
  var doc = SpreadsheetApp.getActive();
  doc.show(app);
}
//
function key(e){
  var app = UiApp.getActiveApplication();
  var src = e.parameter.source;
  var newValue = e.parameter[src]; 
  var act= app.getElementById(src)
  label = app.getElementById('label')
  label.setText("You typed '"+newValue+"' in textBox nr "+src.substring(3));
  act.setStyleAttribute('background','yellow');
  return app
}