从html表单的下拉框中获取选定的值而不提交

时间:2009-01-07 11:05:14

标签: javascript python html google-app-engine drop-down-menu

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

这是我在app引擎中执行的应用程序,它只支持Python。

4 个答案:

答案 0 :(得分:19)

您的问题显示了对web applications如何运作的误解。

用户必须在浏览器中键入地址才能访问该应用程序。这会向服务器发送请求。服务器代码(用python编写)接收此请求并有机会发送答案。答案是通常用HTML编写的文件。该文档的某些部分可以是动态的,即由python代码生成。文档的其他部分可以是静态的。然后,浏览器在用户窗口上呈现文档。

之后,你的python代码可以了解浏览器窗口中发生的事情或运行python代码的任何部分的唯一方法是让浏览器发送另一个请求。

在许多情况下都会发生这种情况,最常见的是:

  • 用户点击指向另一个链接的链接 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中编写的代码进行对话

答案 1 :(得分:3)

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

在客户端,您可以使用Javascript(考虑使用jQuery库)。可能你没有与服务器通信就可以离开。

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

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

答案 2 :(得分:1)

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

如果您使用的是jQuery,请查看it's ajax stuff.,它是Events model。首先,您必须将下拉列表的事件附加到要执行的函数。因此,当用户更改下拉列表时,浏览器将在后台打开一个新连接。所以,您可以获得该值并将其保存在服务器端。会的......像这样:

$(document).ready( 

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

);

希望它有所帮助!

答案 3 :(得分:0)

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

〜Cyrix的