【问题标题】:How to get a selected item in drop-down list?如何在下拉列表中获取所选项目?
【发布时间】:2018-12-25 17:39:42
【问题描述】:

我有以下 html 文件:

<!DOCTYPE html>
<html>
<body>

<select name="action" size="1" id="action-choice">
    <option value="test">Test</option>
    <option value="run">Run</option>
</select>

如何使用 Go 获取所选选项的值?

func main() {
    log.Println("started")
    http.HandleFunc("/upload", upload)
    log.Fatal(http.ListenAndServe(":8080", nil))
}


func upload(w http.ResponseWriter, r *http.Request) {
    if r.Method == "GET" {
        t, _ := template.ParseFiles("upload.html")
        t.Execute(w, nil)
    }

【问题讨论】:

    标签: html go


    【解决方案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))
    }
    

    【讨论】:

      【解决方案2】:

      首先,您必须在 html 中有一个表单和提交按钮,以将数据发送到路由。您的 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"])
      

      【讨论】:

        猜你喜欢
        • 2012-05-23
        • 2023-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多