151 votes

Ajout de données supplémentaires aux options de sélection à l'aide de jQuery

Question très simple, j'espère.

J'ai l'habituel <select> comme ceci

<select id="select">
    <option value="1">this</option>
    <option value="2">that</option>
    <option value="3">other</option>
</select>

Je peux obtenir la valeur sélectionnée (en utilisant $("#select").val() ) et la valeur d'affichage de l'élément sélectionné (en utilisant la touche $("#select :selected").text() .

Mais comment puis-je stocker comme une valeur supplémentaire dans le fichier <option> tag ? J'aimerais pouvoir faire quelque chose comme <option value="3.1" value2="3.2">other</option> et obtenir la valeur de la value2 (qui serait 3,2 dans l'exemple).

0 votes

Vous voulez ajouter un élément à la boîte de sélection ? ou vous voulez pouvoir en sélectionner plusieurs à la fois et obtenir les résultats ?

0 votes

Non je veux simplement qu'il y ait comme une valeur2="" dans la balise <option>, mais ça ne marche pas

0 votes

Votre question n'est pas claire (pour moi, en tout cas). Que voulez-vous dire par "stocker une autre valeur dans les options de sélection" ? Voulez-vous dire que vous voulez ajouter une nouvelle option à la sélection, qui apparaîtrait à l'utilisateur lorsqu'elle est ouverte ?

349voto

Phrogz Points 112337

Balisage HTML

<select id="select">
  <option value="1" data-foo="dogs">this</option>
  <option value="2" data-foo="cats">that</option>
  <option value="3" data-foo="gerbils">other</option>
</select>

Code

// JavaScript using jQuery
$(function(){
    $('select').change(function(){
       var selected = $(this).find('option:selected');
       var extra = selected.data('foo'); 
       ...
    });
});

// Plain old JavaScript
var sel = document.getElementById('select');
var selected = sel.options[sel.selectedIndex];
var extra = selected.getAttribute('data-foo');

Vous pouvez voir ici un exemple fonctionnel utilisant jQuery : http://jsfiddle.net/GsdCj/1/
Vous pouvez voir ici un exemple de fonctionnement en utilisant simplement JavaScript : http://jsfiddle.net/GsdCj/2/

En utilisant attributs de données à partir de HTML5, vous pouvez ajouter des données supplémentaires aux éléments d'une manière syntaxiquement valide qui est également facilement accessible à partir de jQuery.

0 votes

@jimsmith Oui, il le fera. (Si vous trouvez certaines de ces réponses utiles, vous devriez voter pour elles. Vous devriez également en marquer une comme "acceptée" si vous trouvez qu'elle résout au mieux votre problème).

1 votes

Quoi ? Non, ce n'est pas le cas. Il fonctionnera dans tous les navigateurs qui prennent en charge les attributs de données HTML5.

13 votes

Tous les navigateurs prennent en charge (et ce depuis plus de 10 ans) les attributs "invalides" dans le balisage, et leur obtention/réglage via le DOM. Les attributs "data" de HTML5 sont juste des attributs personnalisés avec un schéma de dénomination et une nouvelle norme qui les déclare légaux.

6voto

mikesir87 Points 1163

Pour moi, il semble que vous vouliez créer un nouvel attribut ? Voulez-vous

<option value="2" value2="somethingElse">...

Pour cela, vous pouvez faire

$(your selector).attr('value2', 'the value');

Et ensuite pour le récupérer, vous pouvez utiliser

$(your selector).attr('value2')

Ce ne sera pas un code valide, mais je suppose que ça fait l'affaire.

1 votes

L'autre méthode consiste à utiliser $(selector).data('value2', "votre valeur") et $(selector).data('value2') pour récupérer... ce qui est toujours valable.

0 votes

Eh bien, il ne serait pas syntaxiquement valide d'avoir des attributs non standard dans le balisage original, mais a) je n'ai jamais vu aucun navigateur depuis l'époque de NS4 avoir un problème avec cela, et b) si vous pouvez modifier le DOM pour produire quelque chose qui est "syntaxiquement invalide", est-ce vraiment le cas ?

0 votes

Oui, c'est vraiment... invalide. pourquoi utiliser des propriétés arbitraires alors que les propriétés data-* ont été définies dans la norme html5.

2voto

zsalzbank Points 5698

J'ai donné deux exemples de ce que je pense être votre question :

http://jsfiddle.net/grdn4/

Vérifiez ceci pour stocker des valeurs supplémentaires. Il utilise des attributs de données pour stocker l'autre valeur :

http://jsfiddle.net/27qJP/1/

-1voto

Fadid Points 31

HTML/JSP Markup :

<form:option 
data-libelle="${compte.libelleCompte}" 
data-raison="${compte.libelleSociale}"   data-rib="${compte.numeroCompte}"                              <c:out value="${compte.libelleCompte} *MAD*"/>
</form:option>

CODE JQUERY : Événement : changement

var $this = $(this);
var $selectedOption = $this.find('option:selected');
var libelle = $selectedOption.data('libelle');

Pour avoir un élément libelle.val() ou libelle.text()

0 votes

<form:option data-libelle-compte="${compte.libelle} data-raison="${compte.raison}" data-compte="${compte.numero}"> <c:out value="${compte.libelleCompte} MAD "/> </form:option>

-4voto

Kyle Points 422

Pour enregistrer une autre valeur dans les options sélectionnées :

$("#select").append('<option value="4">another</option>')

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X