Это не то, как работает HTML <form>
. Когда вы используете <select>
в <form>
, вы должны указать атрибут name
на <select>
- вы сделали это право. И вы должны указать атрибут value
для тегов <option>
, неid
. Вы также можете указать атрибут id
(например, если вы хотите ссылаться на тег по его идентификатору), но это не то, что отправляется при отправке формы.
Когда форма отправлена, A "key"="value"
пара будет отправлен на <select>
, где "key"
будет значением атрибута <select>
name
и "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>`
При выборе "The Godfather"
и представить, консоль показывает:
2015/12/05 21:18:42 Selected film: 1
При выборе "The Godfather: Part II"
и представить, консоль показывает:
2015/12/05 21:18:45 Selected film: 2
Спасибо за разъяснение! – nolem