1

如何从 html 表单中的下拉框元素中获取所选项目的文本?(使用python)当我使用鼠标从下拉框中选择一项时,如何将值存储到变量中?(即不使用提交按钮)

这是针对我在仅支持 Python 的应用程序引擎中执行的应用程序。

4

4 回答 4

19

您的问题显示了对Web 应用程序如何工作的一些误解。

用户必须在浏览器中输入地址才能访问应用程序。这向服务器发送请求。服务器代码(用 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 API 来发送请求。这样您就可以在 python 中接收值并发送答案,然后浏览器中的 javascript 代码将接收到该答案。该代码可以根据答案更改部分页面,而无需更改整个页面。这种技术称为AJAX

如果您打算编写大量 javascript 代码,我强烈建议您至少使用 javascript 库来减轻处理许多浏览器版本的痛苦。jQuery是我的首选库。

换句话说,在浏览器中运行的用 javascript 编写的代码与在服务器中运行的用 python 编写的代码进行对话。

于 2009-01-07T11:43:06.200 回答
3

您的 python 代码在服务器上运行(google appengine)。HTML 表单在客户端(在浏览器中)运行。客户端和服务器通过 HTTP 协议进行通信。客户端发送请求,服务器响应响应。你必须向服务器发送一些东西,让你的 python 代码知道用户操作。

在客户端,您可以使用 Javascript(考虑使用 jQuery 库)。可能您无需与服务器通信就可以逃脱。

如果您必须与服务器通信但不想重新加载页面,请使用AJAX 技术。在这种情况下,您必须在您的 python 应用程序中创建特殊视图并在 Javascript 中发起请求。

请记住,Javascript 用于客户端,Python 用于服务器端。

于 2009-01-07T11:22:07.410 回答
1

如果您需要将选定的值发送到您的服务器而不提交,我认为最好的(如果不是唯一的)方法是使用一些 ajax。

如果您使用的是 jQuery,请查看它的 ajax 内容。它是事件模型。您首先必须将下拉菜单的事件附加到您要执行的功能。因此,当用户更改下拉列表时,浏览器将在后台打开一个新连接。因此,您可以获得该值并将其保存在服务器端。会是…… 像这样:

$(document).ready( 

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

);

希望能帮助到你!

于 2009-01-07T13:42:55.847 回答
0

使用 onchange 的问题在于并非所有用户都使用鼠标。如果您有一个组合框并使用键盘更改值,那么如果不提交表单,您将永远无法超过第一个值。

~西里克斯

于 2011-09-02T14:14:07.910 回答