我有以下html文件:
free
如何使用Go获取所选选项的值?
<!DOCTYPE html>
<html>
<body>
<select name="action" size="1" id="action-choice">
<option value="test">Test</option>
<option value="run">Run</option>
</select>
答案 0 :(得分:1)
首先,您必须在html中拥有一个表单并提交按钮才能将数据发送到route。您的html中没有表单。
<form method="post" action"/upload">
<select name="action" size="1" id="action-choice">
<option value="test">Test</option>
<option value="run">Run</option>
</select>
<button type="submit">Submit</button>
</form>
第二:在您的上传功能中,您可以执行以下操作:
r.ParseForm()
fmt.Println(r.Form["action"])
答案 1 :(得分:1)
Go代码充当服务器,并且由于HTML文件正在用户浏览器中运行,因此,如果不将其发送到服务器,就无法访问它。在此示例中,我将使用HTTP GET。
假设您的html文件位于“ /”下
首先,将html文件更改为使用GET表单:
<!DOCTYPE html>
<html>
<body>
<form action="/upload" method="get">
<select name="action" size="1" id="action-choice">
<option value="test">Test</option>
<option value="run">Run</option>
</select>
<input type="submit" value="Submit">
</form>
现在,我们需要在/ upload下捕获此GET请求(因为表单已重定向到/ upload)
func upload(w http.ResponseWriter, r *http.Request) {
if r.Method == "GET" {
r.ParseForm()
w.Write([]byte(r.Form["action"][0]))
}
}
所以我们可以将其汇总为以下GO代码
package main
import (
"net/http"
"log"
)
var page = `<!DOCTYPE html>
<html>
<body>
<form action="/upload" method="get">
<select name="action" size="1" id="action-choice">
<option value="test">Test</option>
<option value="run">Run</option>
</select>
<input type="submit" value="Submit">
</form>`
func m(w http.ResponseWriter, r *http.Request) {
w.Write([]byte(page))
}
func upload(w http.ResponseWriter, r *http.Request) {
if r.Method == "GET" {
r.ParseForm()
w.Write([]byte(r.Form["action"][0]))
}
}
func main() {
log.Println("started")
http.HandleFunc("/", m)
http.HandleFunc("/upload", upload)
log.Fatal(http.ListenAndServe(":8080", nil))
}