javascript - 为什么当我点击提交时表单的参数消失了?
问题描述
在我的谷歌应用程序脚本中,我有一个带有表单的 html 页面,其动作属性是根据输入值(使用 javascript)动态创建的,并且我使用参数创建动作 url。之后我插入一些输入值,正确创建了动作 url(我检查了代码),但是当我点击提交按钮时,动作 url 打开但没有参数。
我尝试使用 get, post 方法,但我有一些结果,打开了新的 url 但没有参数,只有“?” 特点。但是,如果我对链接和 href 属性执行相同的过程,它就可以正常工作。我注意到参数没有到达 doget 函数
包括文件 index.html 和 app.gs
<form id="myForm" action="#">
<div class="form-row">
<div class="col">
<input type="text" class="form-control" placeholder="Numero" id="numero">
</div>
<div class="col">
<div class="form-group">
<select id="tipologia" class="form-control">
<option selected>Tipologia supporto</option>
<option >concorsi</option>
</select>
</div>
</div>
</div>
<button type="submit" class="btn-get-started scrollto">Richiedi assistenza Form</button><!--NOT WORK-->
</form>
<a href="#" id="btn" class="btn-get-started scrollto">Richiedi assistenza</a><!--WORK-->
<script>
document.getElementById("tipologia").addEventListener("change", redirect);
function redirect(){
var nome =document.getElementById("nome").value;
var numero =document.getElementById("numero").value;
var opzioni = document.getElementById("tipologia");
var selezionato = opzioni.options[opzioni.selectedIndex].value;
document.getElementById("btn").href="https://script.google.com/macros/s/AKfycbxia-_rMYlvVjrlyGGd7zRcb1CD5hSYe6W-mLldzxY__8I2b3Q/exec?supporto="+selezionato+"&controllo="+numero+"&nome="+nome;
document.getElementById("myForm").action ="https://script.google.com/macros/s/AKfycbxia-_rMYlvVjrlyGGd7zRcb1CD5hSYe6W-mLldzxY__8I2b3Q/exec?supporto="+selezionato+"&controllo="+numero+"&nome="+nome;
}
</script>
function doGet(e) {
Logger.log(e.parameter.supporto);
var supporto = e.parameter.supporto;
var numero= e.parameter.controllo;
var nome= e.parameter.nome;
}
我不明白为什么参数会消失
解决方案
当您使用(默认)提交表单时method="GET"
,将使用 中指定的 URLaction
作为基础。
查询字符串(您使用 JavaScript 添加的)已从中删除,并替换为使用来自成功表单控件的数据构建的查询字符串。
由于您的表单控件都没有名称,因此没有一个成功,因此没有数据。这会给你一个空白的查询字符串。
不要尝试使用 JavaScript 设置操作(您做错了:DOMaction
属性需要一个纯 URL,而不是 HTML 编码的)。
只需在action
属性中设置基本 URL 并为表单控件命名。
<form id="myForm" action="https://script.google.com/macros/s/AKfycbxia-_rMYlvVjrlyGGd7zRcb1CD5hSYe6W-mLldzxY__8I2b3Q/exec">
<div class="form-row">
<div class="col">
<input type="text" class="form-control" name="controllo" placeholder="Numero" id="numero">
</div>
<div class="col">
<div class="form-group">
<select id="tipologia" name="supporto" class="form-control">
<option selected>Tipologia supporto</option>
<option>concorsi</option>
</select>
</div>
</div>
</div>
<button type="submit" class="btn-get-started scrollto">Richiedi assistenza Form</button>
</form>
注意,您的代码包含但您的 HTMLvar nome =document.getElementById("nome").value;
中没有匹配项。id
这会导致你的 JS 出错。
推荐阅读
- fable-f# - Fable Elmish 中的属性与属性
- javascript - mpld3 在同一个 html 页面上使用 d3v3 和 d3v4
- firebase - 为什么 Smart TV Web 应用上会发生此 Firebase IDBIndex 错误,是否有解决方法?
- mysql - 更改在生产中运行的 4M+ 条目表上的列
- javascript - 合并来自不同组件的 observables
- java - 在程序代码中而不是从文件中手动加载我的数组是个好主意吗?
- javascript - 根据 Google Apps 脚本中的另一个数组过滤数组
- python - Django 2.2 错误:int() 参数必须是字符串、类似字节的对象或数字,而不是“列表”
- javascript - 如何将 Jquery 代码转换为纯 JavaScript 代码
- android - OneSignal Web 查看基于用户的通知