Как получить выбранный элемент в раскрывающемся списке? - PullRequest
0 голосов
/ 24 декабря 2018

У меня есть следующий 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)
    }

Ответы [ 2 ]

0 голосов
/ 24 декабря 2018

Код 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>

Теперь нам нужно перехватить этот GET-запрос в / upload (так как форма перенаправляет на / 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))
}
0 голосов
/ 24 декабря 2018

Первым делом у вас должна быть форма и кнопка отправки в 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"])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...