2015-12-05 4 views
2

Я пытаюсь получить идентификатор значения параметра из раскрывающегося списка формы HTML.Получение идентификатора опции формы с помощью ParseForm()

Скажем, у меня есть эти строки в моем HTML файл:

<select name="film" id="films"> 
<option id="1">Godfather</option> 
</select> 

И это в моем файле Go:

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

Это даст мне текст из опции ("Godfather"), но Мне нужно получить идентификатор опции ("1") и сохранить его как переменную. Как мне это сделать?

ответ

6

Это не то, как работает 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 
+0

Спасибо за разъяснение! – nolem

Смежные вопросы