1

我有一个文本框的事件处理函数,它执行以下操作,

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

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

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

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

此外

textbox1.addKeyUpHandler('search1');

这三个函数之间的唯一区别是使用的模式是“e.parameter.textbox1NAME”还是“e.parameter.textbox2NAME”或“e.parameter.textbox3NAME”

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

4

3 回答 3

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 脚本论坛进行一些研究。

于 2012-06-24T16:56:03.397 回答
0

如果我理解正确,它类似于:我有 1-n 个盒子,并且想要将特定事件的处理程序绑定到它。解决方案(使用 jquery)是对 dom 对象(框)使用选择器并附加一个处理程序,例如单击所有对象,如下所示:

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

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

干杯悠闲

于 2012-06-24T16:10:48.973 回答
0

斯里克的回答很聪明!我喜欢它并想试一试......这里有一个例子来说明!

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
}
于 2012-06-24T17:48:20.837 回答