我有一个文本框的eventhandler函数,它执行以下操作,
应该为另外两个文本框执行相同的功能。
由于文本框的值是使用“e.parameter.textbox1NAME”获得的,因此我添加了另外两个函数作为事件处理程序,
textbox2.addKeyUpHandler('search2');
textbox3.addKeyUpHandler('search3');
除了
textbox1.addKeyUpHandler('search1');
这三个函数的唯一区别在于使用的模式是否是, “e.parameter.textbox1NAME”或“e.parameter.textbox2NAME”或“e.parameter.textbox3NAME”
我认为这是低效的,有没有办法知道哪个元素调用处理程序或哪个元素是焦点? 感谢
答案 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 event或 jquery 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
}