Frage

Wie Sie den Text von ausgewählten Elementen aus einem Drop-Down-Box-Elemente in HTML-Formularen zu bekommen? (Unter Verwendung von Python) Wie kann ich speichern den Wert einer Variablen, wenn ich ein Element aus der Drop-Down-Box mit der Maus auswählen? (Dh., Ohne einen Submit-Button zu verwenden)

Dies ist für eine Anwendung, die ich in App Engine machte den Python nur unterstützt.

War es hilfreich?

Lösung

Ihre Frage zeigt einige Missverständnisse darüber, wie Webanwendungen Arbeit.

Der Benutzer hat eine Adresse in einem Browser eingeben, um die Anwendung zu erhalten. Das sendet eine Anfrage an den Server. Der Server-Code (in Python geschrieben) empfängt diese Anforderung und hat die Möglichkeit, eine Antwort zu senden. Die Antwort ist ein Dokument, in der Regel geschrieben in HTML . Einige Teile des Dokumentes durch den Python-Code dynamisch, das heißt erzeugt werden. Andere Teile des Dokuments können statisch sein. Der Browser macht dann das Dokument auf dem Benutzerfenster.

Danach wird die nur einzelne Art und Weise Ihr Python-Code über etwas wissen kann, die auf dem Browser-Fenster passiert, oder einen beliebigen Teil des Python-Code ausführen können, ist der Browser, um eine weitere Anfrage zu senden.

Das in vielen Situationen passieren kann, wobei die gängigste:

  • Der Benutzer klickt auf einen Link zu einem anderen url, senden making Browser eine andere Anforderung an diese neue URL.
  • Der Benutzer klickt auf submit Taste, so dass Browser senden Sie das Formular als Antrag an die Adresse in der konfigurierten Form der action Attribut.
  • Einige Code in der aktuellen Seite, geschrieben in der Regel in ECMAscript (auch als Javascript bekannt ), eine Anforderung unter der Haube.

Letzteres ist das, was Sie wollen. Sie müssen in Javascript schreiben einige Code der Browser in der Drop-Down auf den Server gewählt, die Informationen zu machen senden. Auf diese Weise Ihres Python-Code auf dem Server etwas dagegen tun können.

Die einfache Art und Weise zu tun, ist durch das onchange Ereignis des Tropfens macht nach unten tut einem vorlegen:

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

So, wenn der Benutzer den Wert auf der Dropdown ändert, wird die Form submited als ob der Benutzer anschließend auf geklickt. Python-Code auf dem Server ausgeführt wird. Der Browser wird die Antwort laden.

Ein weiterer beliebter Weg wäre Javascript XMLHttpRequest DOM API die Anforderung zu senden. Auf diese Weise können Sie den Wert in Python erhalten und eine Antwort, die wiederum senden wird von dem JavaScript-Code im Browser empfangen werden. Dieser Code kann Teile der Seite auf die Antwort basierend ändern, ohne die gesamte Seite zu ändern. Diese Technik heißt AJAX .

Wenn Sie planen, eine Menge JavaScript-Code zu schreiben, empfehle ich eine JavaScript-Bibliothek zumindest mit dem Schmerz des Umgangs mit vielen Browser-Versionen zu erleichtern. jQuery meiner Bibliothek der Wahl ist.

Mit anderen Worten geschriebenen Code in Javascript in Ihrem Browser ausgeführt Gespräche , um den Code in Python geschrieben in dem Server ausgeführt wird.

Andere Tipps

Ihr Python-Code läuft auf dem Server (google appengine). HTML-Formular wird auf dem Client (im Browser). Der Client und der Server kommunizieren über das HTTP-Protokoll. Der Client sendet Anfragen , und der Server antwortet mit Antworten . Sie haben etwas an den Server zu senden, um Ihren Python-Code über Benutzeraktionen wissen zu lassen.

Auf der Clientseite können Sie verwenden Javascript (man denke Bibliothek mit jQuery). Wahrscheinlich können Sie weg an den Server ohne Verbindung steht.

Wenn Sie auf dem Server zu kommunizieren haben, wollen aber nicht die Seite neu zu laden, verwenden Sie die AJAX-Technik . In diesem Fall haben Sie spezielle Ansichten in Ihrer Python-Anwendung zu erstellen und zu initiieren Anfragen in Javascript.

Denken Sie daran, Javascript für die Client-Seite ist, Python für die Server-Seite ist.

Wenn Sie ohne submiting den ausgewählten Wert an den Server zu senden, ich glaube, dass die besten (wenn nicht die einzige) aproach wäre, eine Ajax zu verwenden.

Wenn Sie jQuery verwenden, haben einen Blick auf es ist Ajax-Sachen. und es ist Events Modell . Sie werden zunächst in der Dropdown-Veranstaltung auf die Funktion, die Sie ausführen wollen, müssen befestigen. Also, wenn der Benutzer die Dropdown ändert, dann wird der Browser eine neue Verbindung hinter den Kulissen öffnen. Also das, können Sie diesen Wert erhalten und es auf der Serverseite speichern. Wäre etw. wie folgt aus:

$(document).ready( 

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

);

Hoffe, es hilft!

Das Problem Onchange mit ist, dass nicht alle Benutzer eine Maus verwenden. Wenn Sie eine Combo-Box haben und den Wert mit der Tastatur ändern, würden Sie nie in der Lage sein, über den ersten Wert, ohne das Formular absenden zu erhalten.

~ Cyrix

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top