Javascript HTMLOnChange并没有启动谷歌的htmlservice
我正在努力学习谷歌的htmlservice是如何工作的。我采取了他们的方法,并修改如下:Javascript HTMLOnChange并没有启动谷歌的htmlservice,javascript,html,google-apps-script,Javascript,Html,Google Apps Script,我正在努力学习谷歌的htmlservice是如何工作的。我采取了他们的方法,并修改如下: var whichYear=''; var whichClass=''; function processForm(formObject) { Logger = BetterLog .useSpreadsheet('0AiWcWJrA0KCpdHB2X2pYQ04xSXNDVnNtTnBOX1RRd1E'); Logger.log('in processForm enumeratin
var whichYear='';
var whichClass='';
function processForm(formObject) {
Logger = BetterLog
.useSpreadsheet('0AiWcWJrA0KCpdHB2X2pYQ04xSXNDVnNtTnBOX1RRd1E');
Logger.log('in processForm enumerating properties');
for(var prop in formObject){
Logger.log('Entered processForm - prop::'+prop+'--value-- '+formObject[prop]+':: ');
if( prop == 'yearSelect')
{
if (formObject[prop] != 'nochange')
whichYear=formObject[prop];
}
else
if(prop == 'classSelect'){
if(formObject[prop]!= 'nochange')
whichClass = formObject[prop];
}
if (whichClass != '' && whichYear!='')
tallyClass();
}
return 'a string';
}
function tallyClass(){
Logger = BetterLog
.useSpreadsheet('0AiWcWJrA0KCpdHB2X2pYQ04xSXNDVnNtTnBOX1RRd1E');
Logger.log('Entered tallyClass - whichYear::'+whichYear+'--whichClass--'+whichClass+':: ');
}
<script>
function updateUrl(url) {
var div = document.getElementById('output');
div.innerHTML = '<a href="' + url + '">Please choose which group to tally.</a>';
}
</script>
<form>
<select name="yearSelect" id="yearSelect" onchange="google.script.run
.withSuccessHandler(updateUrl)
.processForm(this.parentNode)" >
<option value="nochange">Please select a year</option>
<option value="2006">2006</option>
<option value="2010">2010</option>
</select>
<p>
<select name="classSelect" id="classSelect" onchange="google.script.run
.withSuccessHandler(updateUrl)
.processForm(this.parentNode)" >
<option value="nochange">Please select a class</option>
<option value="oldbie">oldbie</option>
<option value="newbie">newbie</option>
</select>
</form>
<p>
<div id="output"> </div>
<input type="button" value="Close" onclick="google.script.host.close()" />
关联的html如下所示:
var whichYear='';
var whichClass='';
function processForm(formObject) {
Logger = BetterLog
.useSpreadsheet('0AiWcWJrA0KCpdHB2X2pYQ04xSXNDVnNtTnBOX1RRd1E');
Logger.log('in processForm enumerating properties');
for(var prop in formObject){
Logger.log('Entered processForm - prop::'+prop+'--value-- '+formObject[prop]+':: ');
if( prop == 'yearSelect')
{
if (formObject[prop] != 'nochange')
whichYear=formObject[prop];
}
else
if(prop == 'classSelect'){
if(formObject[prop]!= 'nochange')
whichClass = formObject[prop];
}
if (whichClass != '' && whichYear!='')
tallyClass();
}
return 'a string';
}
function tallyClass(){
Logger = BetterLog
.useSpreadsheet('0AiWcWJrA0KCpdHB2X2pYQ04xSXNDVnNtTnBOX1RRd1E');
Logger.log('Entered tallyClass - whichYear::'+whichYear+'--whichClass--'+whichClass+':: ');
}
<script>
function updateUrl(url) {
var div = document.getElementById('output');
div.innerHTML = '<a href="' + url + '">Please choose which group to tally.</a>';
}
</script>
<form>
<select name="yearSelect" id="yearSelect" onchange="google.script.run
.withSuccessHandler(updateUrl)
.processForm(this.parentNode)" >
<option value="nochange">Please select a year</option>
<option value="2006">2006</option>
<option value="2010">2010</option>
</select>
<p>
<select name="classSelect" id="classSelect" onchange="google.script.run
.withSuccessHandler(updateUrl)
.processForm(this.parentNode)" >
<option value="nochange">Please select a class</option>
<option value="oldbie">oldbie</option>
<option value="newbie">newbie</option>
</select>
</form>
<p>
<div id="output"> </div>
<input type="button" value="Close" onclick="google.script.host.close()" />
我试图避免使用提交按钮,以便动态响应菜单选择事件。选择哪一年会按预期触发formProcess函数,但相同的类选择菜单不会执行任何操作
我希望看到的是,当选择一个菜单时,我得到一个onchange事件调用。当我收到两个onchange事件调用时,我将处理用户的选择
我很确定我可以做一个onSubmit调用并完成它,但我真的很想理解为什么如果选择了第二个菜单,我永远不会得到onchange调用
onchange事件是否仅可附加到单个元素?在中的两个下拉菜单之间更改HTML
<p>
到
关闭段落标记修复了该问题
错误滑过了渲染器,因此对话框正确渲染,但没有通过监视DOM事件的代码。因此,第二个下拉列表中没有onChange事件。添加应用程序脚本标记,因为这看起来至少应该记录Enteres Processform。多个google.script.runs应该可以正常工作。但它们都显示出相同的形式。你看不出有什么不同。也检查一下p标签。@Riel我同意日志应该显示ProcessForm是输入的,但事实并非如此。只有对第一个菜单的更改才会触发onChange。我真的不在乎是否知道哪个菜单触发了onchange事件,因为当它在第一个菜单上触发时,我得到了第二个菜单的值。@Riel谢谢!您对p标记的评论导致了解决方案。谢谢