2009-01-07 5 views
1

Comment obtenir le texte de l'élément sélectionné à partir d'un élément de liste déroulante dans les formulaires html? (en utilisant python) Comment puis-je stocker la valeur dans une variable, lorsque je sélectionne un élément dans la liste déroulante à l'aide de la souris? (c'est-à-dire sans utiliser un bouton de soumission)Obtention de la valeur sélectionnée à partir de la liste déroulante dans un formulaire HTML sans soumettre

Ceci est pour une application que je fais dans le moteur de l'application qui ne supporte que Python.

Répondre

19

Votre question montre un malentendu sur la façon dont web applications fonctionne.

L'utilisateur doit taper une adresse dans un navigateur pour accéder à l'application. Cela envoie une requête au serveur. Le code du serveur (écrit en python) reçoit cette requête et a la possibilité d'envoyer une réponse. La réponse est un document généralement écrit en HTML. Certaines parties de ce document peuvent être dynamiques, c'est-à-dire générées par le code python. D'autres parties du document peuvent être statiques. Le navigateur affiche ensuite le document dans la fenêtre de l'utilisateur. Après cela, le seul moyen que votre code python peut connaître de quelque chose qui se passe dans la fenêtre du navigateur, ou exécuter une partie du code python, est de faire en sorte que le navigateur envoie une autre requête.

Cela peut se produire dans de nombreuses situations, l'être le plus commun:

  • utilisateur clique sur un lien vers une autre URL , faisant navigateur envoyer une autre demande à cette nouvelle URL.
  • utilisateur clique sur le bouton submit, faisant navigateur soumettre le formulaire comme une demande à l'adresse configurée dans l'attribut action de la forme .
  • Un certain code dans la page actuelle, généralement écrit en ECMAscript (également connu sous le nom javascript), fait une demande sous le capot.

Ce dernier est ce que vous voulez. Vous devez écrire javascript du code pour que le navigateur envoie les informations choisies dans la liste déroulante vers le serveur. De cette façon, votre code python sur le serveur peut faire quelque chose.

La façon simple de le faire est en faisant l'événement onchange de la baisse faire descendre un soumettre:

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

De cette façon, lorsque l'utilisateur modifie la valeur sur le menu déroulant, le formulaire sera submited comme si l'utilisateur a cliqué sur soumettre. Le code Python sur le serveur va s'exécuter. Le navigateur chargera la réponse.

Un autre moyen populaire serait d'utiliser l'API DOM de javascript XmlHTTPRequest pour envoyer la requête. De cette façon, vous pouvez recevoir la valeur en python et envoyer une réponse, qui à son tour sera reçue par le code javascript dans le navigateur. Ce code peut changer des parties de la page en fonction de la réponse, sans changer la page entière. Cette technique est appelée AJAX.

Si vous envisagez d'écrire beaucoup de code javascript, je suggère fortement d'utiliser une bibliothèque javascript au moins pour alléger la peine de traiter de nombreuses versions de navigateur. jQuery est ma bibliothèque de choix. En d'autres termes, le code écrit en javascript dans le navigateur parle au code écrit en python s'exécutant sur le serveur.

+0

merci beaucoup! ça a marché. et merci spécial pour l'info supplémentaire. je suis débutant .... – Tom

3

Votre code python s'exécute sur le serveur (google appengine). Le formulaire HTML s'exécute sur le client (dans le navigateur). Le client et le serveur communiquent via le protocole HTTP. Le client envoie demandes et le serveur répond avec réponses. Vous devez envoyer quelque chose au serveur pour informer votre code python des actions de l'utilisateur.

Du côté client, vous pouvez utiliser Javascript (pensez à utiliser la bibliothèque jQuery). Probablement, vous pouvez vous en sortir sans communiquer avec le serveur.

Si vous devez communiquer avec le serveur mais que vous ne souhaitez pas recharger la page, utilisez le AJAX technique. Dans ce cas, vous devez créer des vues spéciales dans votre application python et lancer des requêtes en Javascript. Rappelez-vous, Javascript est pour le côté client, Python est pour le côté serveur.

+0

merci beaucoup pour la réponse rapide! – Tom

1

Si vous avez besoin d'envoyer la valeur sélectionnée à votre serveur sans soumettre, je pense que la meilleure (sinon la seule) approche serait d'utiliser un ajax. Si vous utilisez jQuery, regardez it's ajax stuff. et Events model. Vous devez d'abord attacher l'événement de la liste déroulante à la fonction que vous voulez exécuter. Ainsi, lorsque l'utilisateur modifie la liste déroulante, le navigateur ouvre une nouvelle connexion dans les coulisses. Donc, le, vous pouvez obtenir cette valeur et l'enregistrer sur le côté serveur. Serait sth. comme ceci:

$(document).ready( 

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

); 

Espérons que ça aide!

+0

merci beaucoup pour la réponse rapide! – Tom

0

Le problème avec l'utilisation de onchange est que tous les utilisateurs n'utilisent pas une souris. Si vous avez une combo-box et modifiez la valeur avec le clavier, vous ne pourrez jamais dépasser la première valeur sans la soumission du formulaire.

~ Cyrix

Questions connexes