11
votes

Passer des champs d'entrée cachés dans l'option HTML Select

Est-ce que quelqu'un sait s'il est possible de transmettre un paramètre de demande masqué avec un Liste des options, pourrais-je en quelque sorte Passez une valeur cachée dans, ainsi que la valeur "FOO" et récupérez-le comme paramètre de demande? Par exemple. me permettrait d'obtenir les valeurs "foo" et "bar" à partir de la demande lorsque l'utilisateur a sélectionné l'option FOO. .

merci


2 commentaires

Clarifier. Donnez un exemple de ce que vous voulez.


J'ai clarifié ma question. Désolé, les éléments de code HTML incorrectement formaté n'étaient pas affichés avant. Merci


5 Réponses :


3
votes

Il y a l'entrée de formulaire type = 'caché' que vous pouvez mettre à jour à l'aide de l'événement tinchange de la liste déroulante SELECT. Il serait affiché avec le formulaire. Je soupçonne que vous voudriez créer un tableau des valeurs possibles pour l'entrée cachée dans le même ordre que leurs équivalents dans la liste déroulante Sélectionner, puis accédez à la valeur de la matrice par index à l'aide de la propriété sélectionnée de l'élément SELECT.


1 commentaires

Merci Dave, j'ai considéré JavaScript mais j'ai décidé contre elle à la fin. Je veux utiliser une solution purement html.



18
votes

Une liste de sélection a à la fois une valeur affichée à l'utilisateur et une valeur qui est transmise au serveur dans le formulaire post. Afin que vous puissiez utiliser une sorte de délimiteur dans la valeur affichée pour obtenir les deux valeurs renvoyées, puis les analyser à ce point: xxx

mais il serait encore de transmettre une valeur d'identification que vous pourrait alors utiliser pour savoir quel élément a été sélectionné dans une base de données et l'utilisera également pour rechercher le deuxième élément associé: xxx

Votre base de données peut ressembler à ceci: xxx


3 commentaires

Merci pour ça. J'utilise réellement la méthode d'analyse en ce moment, mais je me demandais s'il y avait une manière légèrement plus agréable en publiant deux valeurs avec la sélection. Je ne peux pas utiliser la solution de valeur d'identification car la deuxième valeur n'est pas enregistrée dans la base de données. Au fait, mon code HTML que j'ai inclus dans ma question n'a pas été affiché, probablement parce que je ne l'ai pas formé correctement, c'est pourquoi cela se lit mal, désolé!


essayez de stocker les autresData à l'ID d'option


Lorsque vous générez votre page, vous savez que FOO devrait vous renvoyer FOO et BAR. Qu'est-ce qui vous empêche de faire la même chose au traitement à la place? Plutôt que "lors de la sortie, j'écris Foo and Bar", juste faire "si foo puis aussi barre" au traitement ou ai-je manqué quelque chose?



3
votes

Voici une solution alternative supposant que JQuery est disponible. Si vous utilisez une bibliothèque d'utilitaires JS autre que JQuery, ou aucune bibliothèque, cela reste possible. Son juste liant une fonction à l'événement ONCHANGE SELECHANGE et à l'analyse du JSON à partir d'un attribut de données personnalisé.

//bind onchange once document is loaded and ready
$.ready(function(){ $('#TheSelector').on('change',UpdateHidden); });

function UpdateHidden(event)
{
  //Create a base name for grouping dynamic values; ex: Support_AnySelect
  Name='Support_'+SelectField.attr('name');

  //Check if container was made for us already
  Contain=$(this.parent).find('#'+Name+'-container');

  if(Container.length===0)  //make the container if missing
  {
    $(this).after('<span id="'+Name+'-container" style="visibility: none;"></span>');
    Contain=$(this.parent).children('#'+Name+'-container');
  }

  //get our special multi-values, jQuery will auto decode the JSON
  SupportValues = this.data('support');

  Contain.empty(); //get rid of last select options
  $.each(SupportValues,function(i,val)
  {
    Contain.append('<input type="hidden" name="'+Name+'['+i+'] value="'+val+'"/>');
  });
}


1 commentaires

Je pense que votre solution est beaucoup plus puissante et plus légère que la création d'une nouvelle table dans la base de données pour stocker les valeurs. Cependant, vous utilisez beaucoup de raccourcis dans votre code (comme '# theselector' ) qui ne sont pas évidents à comprendre pour les débutants. Et comme ça ne marche pas, je ne pouvais même pas l'essayer dans un violon de comprendre les choses de moi-même. Quoi qu'il en soit, ce sont des choses mineures et j'ai toujours eu mon code de travail grâce à vos indications qui m'ont pointé dans la bonne direction. UPvote!



2
votes

Si vous devez utiliser un champ masqué pour chaque option de la liste déroulante Sélectionner, vous pouvez définir cette valeur dans votre propre attribut dans la balise, au lieu de la définir dans le champ caché.

p>

<option value="foo" fooData="foo|bar">foo</option>
<option value="foo2" fooData="foo2|bar2">foo2</option>


0 commentaires

0
votes

J'aimerais simplement ajouter, que si vous êtes prêt à utiliser des boutons radio au lieu d'une sélection déroulante, les suivants ont fonctionné pour moi:

email = request.POST.get("emaildata","")


0 commentaires