如何获得下拉列表中的选定项目?

时间:2018-12-24 13:15:07

标签: html go

我有以下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>

2 个答案:

答案 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))
}