Получение выбранного значения из выпадающего списка в HTML-форме без отправки - PullRequest
1 голос
/ 07 января 2009

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

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

Ответы [ 4 ]

19 голосов
/ 07 января 2009

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

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

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

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

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

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

Простой способ сделать это - сделать событие onchange раскрывающегося списка отправкой:

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

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

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

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

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

3 голосов
/ 07 января 2009

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

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

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

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

1 голос
/ 07 января 2009

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

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

$(document).ready( 

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

);

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

0 голосов
/ 02 сентября 2011

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

~ Cyrix

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...