2009-01-07 64 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

相關問題