通过ParseForm()

时间:2015-12-05 18:03:16

标签: html forms http go

我正在尝试从HTML表单下拉列表中获取选项值id。

假设我的HTML文件中有这些行:

<select name="film" id="films">
<option id="1">Godfather</option>
</select>

这在我的Go文件中:

func filmFunc(w http.ResponseWriter, r *http.Request) {
    r.ParseForm()
    film_raw := r.Form["film"]
    film := film_raw[0]
    ...
}

这将为我提供选项("Godfather")中的文本,但我需要获取选项id("1")并将其另存为变量。我该怎么办?

1 个答案:

答案 0 :(得分:6)

这不是HTML <form>的工作原理。当您在<form>中使用<select>时,您必须在name指定<select>属性 - 您这样做了。您必须为<option>代码指定value属性, id。您也可以指定id属性(例如,如果您想通过其ID引用标记),但这不是在提交表单时发送的内容。

提交表单后,我们会为"key"="value"发送一个<select>对,其中"key"将是name <select>属性的值},"value"将是所选value的{​​{1}}属性的值。

您可以使用Request.FormValue()按名称获取已提交表单字段的值,请注意,如果需要,这也会调用Request.Parseform(),以便您甚至可以省略该调用。

请参阅此工作示例:

<option>

当您选择func formHandler(w http.ResponseWriter, r *http.Request) { if selectedFilm := r.FormValue("film"); selectedFilm != "" { log.Println("Selected film:", r.FormValue("film")) } w.Write([]byte(html)) } func main() { http.HandleFunc("/", formHandler) log.Fatal(http.ListenAndServe(":8080", nil)) } const html = `<html><body> <form method="POST" action="/"> <select name="film" id="films"> <option value="1">The Godfather</option> <option value="2">The Godfather: Part II</option> </select> <input type="submit" value="Submit"> </form> </body></html>` 并提交时,控制台会显示:

"The Godfather"

当您选择2015/12/05 21:18:42 Selected film: 1 并提交时,控制台会显示:

"The Godfather: Part II"