通过ParseForm()检索表单选项id

nol*_*lem 2 html forms http go

我试图从HTML表单下拉列表中获取选项值id.

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

<select name="film" id="films">
<option id="1">Godfather</option>
</select>
Run Code Online (Sandbox Code Playgroud)

这在我的Go文件中:

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

这将给我来自option("Godfather")的文本,但我需要获取选项id("1")并将其保存为变量.我该怎么做?

icz*_*cza 6

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

提交表单时,"key"="value"将为其发送一对<select>,其中"key"将是name属性的值<select>,并且"value"将是所选value属性的值<option>.

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

看这个工作示例:

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>`
Run Code Online (Sandbox Code Playgroud)

选择"The Godfather"并提交时,控制台显示:

2015/12/05 21:18:42 Selected film: 1
Run Code Online (Sandbox Code Playgroud)

选择"The Godfather: Part II"并提交时,控制台显示:

2015/12/05 21:18:45 Selected film: 2
Run Code Online (Sandbox Code Playgroud)