Получение выбранного значения из выпадающего списка в html-форме без отправки

Как получить текст выбранного элемента из раскрывающегося списка в html-формах? (используя python) Как я могу сохранить значение переменной, когда я выбираю один элемент из раскрывающегося списка с помощью мыши? (т.е. без использования кнопки отправки)

Это для приложения, которое я делаю в движке приложения, который поддерживает только Python.


person Tom    schedule 07.01.2009    source источник


Ответы (4)


Ваш вопрос свидетельствует о некотором непонимании того, как работают веб-приложения.

Пользователь должен ввести адрес в браузере, чтобы получить доступ к приложению. Это отправляет запрос на сервер. Код сервера (написанный на питоне) получает этот запрос и имеет возможность отправить ответ. Ответ представляет собой документ, обычно написанный на HTML. Некоторые части этого документа могут быть динамическими, т.е. генерироваться кодом Python. Другие части документа могут быть статическими. Затем браузер отображает документ в окне пользователя.

После этого единственный способ, которым ваш код Python может узнать о том, что происходит в окне браузера, или запустить какую-либо часть кода Python, — заставить браузер отправить еще один запрос.

Это может произойти во многих ситуациях, наиболее распространенными из которых являются:

  • Пользователь нажимает ссылку на другой URL-адрес, в результате чего браузер отправляет еще один запрос на этот новый URL-адрес.
  • Пользователь нажимает кнопку submit, и браузер отправляет форму как запрос на адрес, указанный в атрибуте формы action.
  • Некоторый код на реальной странице, обычно написанный на ECMAscript (также известном как javascript) , делает запрос под капотом.

Последнее - это то, что вы хотите. Вы должны написать в javascript некоторый код, чтобы браузер отправлял информацию, выбранную в раскрывающемся списке, на сервер. Таким образом, ваш код Python на сервере может что-то с этим сделать.

Самый простой способ сделать это — заставить событие onchange раскрывающегося списка выполнить отправку:

<select name='myfield' onchange='this.form.submit()'>
<option .... >
...
</select>
</form>

Таким образом, когда пользователь изменит значение в раскрывающемся списке, форма будет отправлена, как если бы пользователь нажал кнопку «Отправить». Код Python на сервере будет работать. Браузер загрузит ответ.

Другим популярным способом является использование DOM API XmlHTTPRequest javascript для отправки запроса. Таким образом, вы можете получить значение в python и отправить ответ, который, в свою очередь, будет получен кодом javascript в браузере. Этот код может изменять части страницы в зависимости от ответа, не изменяя всю страницу. Этот метод называется AJAX.

Если вы планируете писать много кода javascript, я настоятельно рекомендую использовать библиотеку javascript, по крайней мере, чтобы облегчить работу со многими версиями браузера. jQuery — моя любимая библиотека.

Другими словами, код, написанный на javascript и работающий в браузере, разговаривает с кодом, написанным на python, работающем на сервере.

person nosklo    schedule 07.01.2009
comment
большое спасибо! это сработало. и отдельное спасибо за дополнительную информацию. я новичек.... - person Tom; 08.01.2009

Ваш код Python работает на сервере (google appengine). HTML-форма запускается на клиенте (в браузере). Клиент и сервер взаимодействуют по протоколу HTTP. Клиент отправляет запросы, а сервер отвечает ответами. Вы должны отправить что-то на сервер, чтобы ваш код Python знал о действиях пользователя.

На стороне клиента вы можете использовать Javascript (рассмотрите возможность использования библиотеки jQuery). Вероятно, вы можете уйти, не общаясь с сервером.

Если вам необходимо связаться с сервером, но вы не хотите перезагружать страницу, используйте метод AJAX. . В этом случае вам нужно создать специальные представления в вашем приложении Python и инициировать запросы в Javascript.

Помните, Javascript предназначен для клиентской части, а Python — для серверной.

person sastanin    schedule 07.01.2009

Если вам нужно отправить выбранное значение на ваш сервер без отправки, я думаю, что лучшим (если не единственным) подходом будет использование некоторого ajax.

Если вы используете jQuery, взгляните на это материал ajax. и это модель событий. Сначала вам нужно будет прикрепить событие раскрывающегося списка к функции, которую вы хотите выполнить. Таким образом, когда пользователь меняет раскрывающийся список, браузер незаметно открывает новое соединение. Таким образом, вы можете получить это значение и сохранить его на стороне сервера. Было бы что-н. так:

$(document).ready( 

    $("#select_id").change(function() {
        $(this).getJSON("/method", {"selectValue":$(this).val()}, function() {
                   alert("value received!");
              });
    });

);

Надеюсь, поможет!

person miya    schedule 07.01.2009

Проблема с использованием onchange заключается в том, что не все пользователи используют мышь. Если у вас есть поле со списком и вы меняете значение с помощью клавиатуры, вы никогда не сможете пройти мимо первого значения без отправки формы.

~ Сайрикс

person Ian Stanway    schedule 02.09.2011