2009-01-07 61 views
1

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

这是一个应用程序,我在应用程序引擎中只支持Python。

回答

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编写的代码在服务器上运行。

+0

非常感谢!有效。 并特别感谢您的额外信息。 我是新手.... – Tom 2009-01-08 05:21:25

3

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

在客户端可以使用Javascript(考虑使用jQuery库)。也许你可以离开而不与服务器通信。

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

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

+0

非常感谢您的快速响应! – Tom 2009-01-08 05:19:34

1

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

如果您使用的是jQuery,请查看it's ajax stuff.以及它的Events model。您首先必须将下拉的事件附加到您要执行的功能。所以,当用户改变下拉菜单时,浏览器会在幕后打开一个新的连接。所以,你可以得到这个值并将它保存在服务器端。会是的。像这样:

$(document).ready( 

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

); 

希望它有帮助!

+0

非常感谢您的快速回复! – Tom 2009-01-08 05:20:10

0

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

〜Cyrix

相关问题