我在我的表单中有一个多选输入,我试图在我的处理程序中获取所选值,但我不能,我怎么能得到这些值?
<form action="process" method="post">
<select id="new_data" name="new_data class="tag-select chzn-done" multiple="" style="display: none;">
<option value="1">111mm1</option>
<option value="2">222mm2</option>
<option value="3">012nx1</option>
</select>
</form>
Run Code Online (Sandbox Code Playgroud)
我的处理程序:
func myHandler(w http.ResponseWriter, r *http.Request) {
fmt.Println(r.FormValue("new_data")) // result-> []
fmt.Println(r.Form("new_data")) // result-> []
}
Run Code Online (Sandbox Code Playgroud)
表单序列化数据,从JS控制台中选择选项1和2:
>$('#myform').serialize()
>"new_data=1&new_data=2"
Run Code Online (Sandbox Code Playgroud)
icz*_*cza 17
您不能/不应该使用该Request.FormValue()函数,因为它只返回1个值.使用Request.Form["new_data"]是string包含所有值的s 片.
但请注意,如果您不调用r.FormValue(),则必须Request.Form通过Request.ParseForm()显式调用来触发解析表单(并填充映射).
您还有一个HTML语法错误:该name属性的值未关闭,请将其更改为:
<select id="new_data" name="new_data" class="tag-select chzn-done"
multiple="" style="display: none;">
Run Code Online (Sandbox Code Playgroud)
这是一个完整的应用程序来测试它的工作原理(错误检查ommited!):
package main
import (
"fmt"
"net/http"
)
func myHandler(w http.ResponseWriter, r *http.Request) {
if r.Method == "POST" {
// Form submitted
r.ParseForm() // Required if you don't call r.FormValue()
fmt.Println(r.Form["new_data"])
}
w.Write([]byte(html))
}
func main() {
http.HandleFunc("/", myHandler)
http.ListenAndServe(":9090", nil)
}
const html = `
<html><body>
<form action="process" method="post">
<select id="new_data" name="new_data" class="tag-select chzn-done" multiple="" >
<option value="1">111mm1</option>
<option value="2">222mm2</option>
<option value="3">012nx1</option>
</select>
<input type="Submit" value="Send" />
</form>
</body></html>
`
Run Code Online (Sandbox Code Playgroud)