如何解决获取文本输入框的值,而无需在Google Apps脚本中使用document.getElementById?
我正在创建一个工具,该工具使用google apps脚本html服务创建一个页面,该页面将为所选主题创建一个新的google doc,并使用文本输入框中的值(如果已编辑)以及默认值对于选定的主题,如果没有,但是我不能使用document.getElementById(),并且我想知道是否还有其他选择。我的代码在下面。
function doGet() {
return HtmlService.createHtmlOutputFromFile('Index.html');
}
function customDoc(subject) {
var formattedDate = Utilities.formatDate(new Date(),Session.getScriptTimeZone(),'M/d/yyyy');
var la=['teacher@example.com','LA for '+ formattedDate]
var math=['teacher@example.com','math for '+ formattedDate]
var spanish=['teacher@example.com','Espanol para ' +formattedDate]
var science = ['teacher@example.com','science for '+formattedDate]
var is = ['teacher@example.com','I&S for '+formattedDate]
var cycle= [la,science,is,spanish,math]
var e = null
var d = null
var s = null
var m = null
if (Document.getElementById('Email') === ' '){
e=cycle[subject][1] }
else {e=Document.getElementById('Email')}
if (Document.getElementById('docName') === ' '){
d=cycle[subject][2] }
else {d=Document.getElementById('docName')}
if (Document.getElementById('Sub') === ' '){
s=cycle[subject][2] }
else {s=Document.getElementById('Sub')}
if (Document.getElementById('message') === ' '){
m = ' '}
else {m=Document.getElementById('message')}
var doc = DocumentApp.create(d)
var doccu = doc.getUrl();
var body = m + ' ' + doccu
GmailApp.sendEmail(e,s,body)
console.log(e);
console.log(s);
console.log(body);
console.log(doccu);
console.log(d);
}
<!DOCTYPE html>
<html>
<body>
<h1>CREATE DOC</h1>
<p>Email</p>
<input type="text" id="Email" value=" " style="border-radius: 20px; border-color: crimson; border-width: 20px" />
<p style="font-family: Times New Roman,Times,serif">Doc name</p>
<input type="text" id="docName" value=" " style="border-radius: 20px; border-color: crimson; border-width: 20px" />
<p>Subject</p>
<input type="text" id="Sub" value=" " style="border-radius: 20px; border-color: crimson; border-width: 20px" />
<p>message</p>
<input type="text" id="message" value=" " style="border-radius: 20px; border-color: crimson; border-width: 20px" />
<h2>Fill blanks for subject:</h2>
<button id="1" onclick="google.script.run.customDoc(this.id)">LA</button>
<button id="2" onclick="google.script.run.customDoc(this.id)">Science</button>
<button id="3" onclick="google.script.run.customDoc(this.id)">Individuals and societies</button>
<button id="4" onclick="google.script.run.customDoc(this.id)">Spanish</button>
<button id="5" onclick="google.script.run.customDoc(this.id)">math</button>
</body>
</html>
解决方法
document.getElementById()
是一种客户端功能,因此它必须位于您的HTML中。 (请记住,customDoc()
是服务器端函数。)
您可以调用document.getElementById('docName')
来获取文档名称文本框,然后访问其value
属性来获取文本框内的文本。然后,您可以将此值以及主题名称传递给customDoc()
。
采用相同的方法从HTML输入中获取其他文本框值。
在我对您的原始问题的response中,为了清楚起见,我决定重复onclick="google.script.run.customDoc(this.id)"
。现在,在调用customDoc()
之前还需要执行其他步骤,因此最好调用中间函数。您可以为所有按钮添加event listener,而不是为每个按钮指定onclick
。因此,只要单击按钮,就会调用中介getValuesAndCreateDoc()
函数。
<!DOCTYPE html>
<html>
<style>
input {
border-radius: 20px;
border-color: crimson;
border-width: 20px;
}
</style>
<body>
<h1>CREATE DOC</h1>
<p>Email</p>
<input type="text" id="Email">
<p style="font-family: Times New Roman,Times,serif">Doc name</p>
<input type="text" id="docName">
<p>Subject</p>
<input type="text" id="Sub">
<p>message</p>
<input type="text" id="message">
<h2>Fill blanks for subject:</h2>
<button id="la">LA</button>
<button id="science">Science</button>
<button id="is">Individuals and societies</button>
<button id="spanish">Spanish</button>
<button id="math">math</button>
<script>
// Run getValuesAndCreateDoc() when a button is clicked
const buttons = document.getElementsByTagName('button');
for (let i = 0; i < buttons.length; i++) {
buttons[i].addEventListener('click',getValuesAndCreateDoc);
}
/**
* Get the user values and create the document.
* @param {Event} event
*/
function getValuesAndCreateDoc(event) {
const clicked = event.target.id;
const email = document.getElementById('Email').value.trim();
const docName = document.getElementById('docName').value.trim();
const sub = document.getElementById('Sub').value.trim();
const message = document.getElementById('message').value.trim();
console.log('Clicked: ' + clicked);
console.log('Email: ' + email);
console.log('Doc Name: ' + docName);
console.log('Sub: ' + sub);
console.log('Message: ' + message);
google.script.run.customDoc(clicked,email,docName,sub,message);
}
</script>
</body>
</html>
function doGet() {
return HtmlService.createHtmlOutputFromFile('Index.html');
}
function customDoc(clickedId,message) {
var formattedDate = Utilities.formatDate(new Date(),Session.getScriptTimeZone(),'M/d/yyyy');
var classes = {
'math': {
email: 'teacher@example.com',docName: 'math for ' + formattedDate
},'la': {
email: 'teacher@example.com',docName: 'la for ' + formattedDate
},'science': {
email: 'teacher@example.com',docName: 'science for ' + formattedDate
},'is': {
email: 'teacher@example.com',docName: 'I&S for ' + formattedDate
},'spanish': {
email: 'teacher@example.com',docName: 'Español para ' + formattedDate
}
};
var selectedClass = classes[clickedId];
// Set defaults
if (email == '') {
email = selectedClass.email;
}
if (docName == '') {
docName = selectedClass.docName;
}
if (sub == '') {
sub = clickedId;
}
if (message == '') {
message = 'Default message';
}
console.log('Today: ' + formattedDate);
console.log('Clicked ID: ' + clickedId);
console.log('Email: ' + email);
console.log('Doc Name: ' + docName);
console.log('Sub: ' + sub);
console.log('Message: ' + message);
// Create the Google Doc
var doc = DocumentApp.create(docName);
// Send the email
GmailApp.sendEmail(email,message + ' ' + doc.getUrl());
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。