Javascript 如何存储多个文本框?
我正在谷歌应用程序脚本中创建一个表单,一次创建多个事件,我有方法创建另一个事件文本框,然后将其添加到面板中,但我不知道如何创建多个事件。我应该如何存储多个文本框,以便对每个文本框调用createEvent()Javascript 如何存储多个文本框?,javascript,google-apps-script,google-calendar-api,google-apps,Javascript,Google Apps Script,Google Calendar Api,Google Apps,我正在谷歌应用程序脚本中创建一个表单,一次创建多个事件,我有方法创建另一个事件文本框,然后将其添加到面板中,但我不知道如何创建多个事件。我应该如何存储多个文本框,以便对每个文本框调用createEvent() function doGet(){ var app = UiApp.createApplication().setTitle('QuickAdd Events'); //Create a penel which holds all the form elelemnts var p
function doGet(){
var app = UiApp.createApplication().setTitle('QuickAdd Events');
//Create a penel which holds all the form elelemnts
var parent = app.createHorizontalPanel().setId('parent');
var left = app.createVerticalPanel().setId('left').setWidth(200);
var right = app.createVerticalPanel().setId('right');
var eventTitleLabel = app.createLabel('Event Title:');
var eventTitle = app.createTextBox().setName('eventTitle').setWidth(200);
var eventButton = app.createButton('Create Events');
var childButton = app.createButton('+ Event');
left.add(eventTitleLabel)
.add(eventTitle);
right.add(eventButton)
.add(childButton);
var eventHandler = app.createServerClickHandler('createEvents');
eventHandler.addCallbackElement(left);
eventButton.addClickHandler(eventHandler);
var panelHandler = app.createServerClickHandler('createAnotherEvent');
panelHandler.addCallbackElement(left);
childButton.addClickHandler(panelHandler);
parent.add(left)
.add(right);
app.add(parent);
app.close();
return app;
}
function createAnotherEvent(e){
var app = UiApp.getActiveApplication();
var eventTitleLabel = app.createLabel('Event Title:');
var eventTitle = app.createTextBox().setName('eventTitle').setWidth(200);
app.getElementById('left').add(eventTitleLabel)
.add(eventTitle);
return app;
}
function createEvents(e){
var app = UiApp.getActiveApplication();
try{
//get the entries;
var event = e.parameter.eventTitle;
var cal = CalendarApp.getDefaultCalendar();
cal.createEventFromDescription(event);
app.add(app.createLabel('Event created Successfully'));
//make the form panel invisible
app.getElementById('parent').setVisible(false);
return app;
}
//If an error occurs, show it on the panel
catch(e){
app.add(app.createLabel('Error occured: '+e));
return app;
}
}
我玩了一点你的代码,但因为我不知道你到底想做什么,我不确定它是否会有帮助 至少它展示了如何知道按下了哪个按钮,如何在循环中创建小部件并为它们分配名称和ID。。。但我承认整个事情有点混乱;-) 随意破坏你不需要的东西
function doGet(){
var app = UiApp.createApplication().setTitle('QuickAdd Events');
var label = ['label title1','label title2','label title3','label title4']
var title = ['title1','title2','title3','title4']
//Create a penel which holds all the form elelemnts
var parent = app.createHorizontalPanel().setId('parent');
var left = app.createVerticalPanel().setId('left').setWidth(200);
var right = app.createVerticalPanel().setId('right');
var eventHandler = app.createServerClickHandler('createEvents');
eventHandler.addCallbackElement(left);
var panelHandler = app.createServerClickHandler('createAnotherEvent');
panelHandler.addCallbackElement(left);
for(var n in label){
var eventTitleLabel = app.createLabel(label[n]);
var eventTitle = app.createTextBox().setName(title[n]).setWidth(200);
var eventButton = app.createButton('Create Events').setId('event'+n);
var childButton = app.createButton('+ Event').setId('ch'+n);
left.add(eventTitleLabel)
.add(eventTitle);
right.add(eventButton)
.add(childButton);
eventButton.addClickHandler(eventHandler);
childButton.addClickHandler(panelHandler);
}
parent.add(left)
.add(right);
var hidden = app.createHidden('numberOfTitles').setId('numberOfTitles').setValue(n);// the number of events
left.add(hidden);
app.add(parent);
app.close();
return app;
}
function createAnotherEvent(e){
var app = UiApp.getActiveApplication();
var source = Number(e.parameter.source.replace(/\D/g,''));// the event number from the button pressed
var numberOfTitles = Number(e.parameter.numberOfTitles);
numberOfTitles++
app.getElementById('numberOfTitles').setValue(numberOfTitles);
var eventTitleLabel = app.createLabel('Event Title:');
var eventTitle = app.createTextBox().setName('eventTitle'+numberOfTitles).setWidth(200);// this way the new textBow has a new predictable name and you can easily get it in the handler
app.getElementById('left').add(eventTitleLabel)
.add(eventTitle);
return app;
}
function createEvents(e){
Logger.log(JSON.stringify(e));
var source = Number(e.parameter.source.replace(/\D/g,''));
var numberOfTitles = Number(e.parameter.numberOfTitles);
var app = UiApp.getActiveApplication();
try{
//get the entries;
var event = e.parameter.eventTitle;
var cal = CalendarApp.getDefaultCalendar();
cal.createEventFromDescription(event);
app.add(app.createLabel('Event created Successfully'));
//make the form panel invisible
app.getElementById('parent').setVisible(false);
return app;
}
//If an error occurs, show it on the panel
catch(e){
app.add(app.createLabel('Error occured: '+e));
return app;
}
}
编辑:您的脚本让我想起我刚才回答的一篇旧帖子,它可能会询问您是否需要在此处查看它:事件的数量是可变的还是固定的?你知道会有多少活动/文本框/按钮吗?谢谢,我会看一下。此脚本的主要目的是将标签和文本框配对以捕获事件。只有两个按钮,“创建事件”按钮用于创建文本框上的所有事件,“+事件”用于添加另一个保存事件信息的文本框。我将浏览一下您的代码版本,看看是否可以根据我的需要进行修改。再次感谢:)我已经编辑了上面的代码,以便在打开时只创建一个标签和文本框。当我尝试为create Event方法使用递增的名称时,它不会识别名称,这在create Event方法中:
for(var I=0;I
var Event=e.parameter.eventTitle+I;
var cal=calendapp.getDefaultCalendar();cal.createeventfromsdescription(Event)
app.add(app.createLabel('Event created Successfully'));
返回应用程序
}
您必须使用稍微不同的语法:e.parameter[eventTitle+i];很抱歉打扰您,但是在create event方法中,无法读取包含隐藏值的参数。隐藏值声明如下:var hidden=
app.createHidden('noOfEvents').setId('noOfEvents').setValue(1)代码>在创建事件方法中,此行导致错误:var numberOfEvents=Number(e.parameter.noOfEvents)我希望有一个像按钮一样的按钮,你是一个救生员。我甚至没有足够高的声誉去“投票”这个答案。多谢各位