web-dev-qa-db-fra.com

code pour définir une valeur d'option de zone de sélection en tant qu'objet

dans une page html que j'ai, j'ai une boîte de sélection comme celle-ci avec des valeurs.

<select onChange="return filler(this.value);">
<option value="{'name':'rajiv',age:'40'}">a</option>
<option value="{'name':'mithun',age:'22'}">f</option>
</select>

je veux passer un tableau ou un objet javascript comme valeur d'option. en ce moment, il traite la valeur de l'option comme une chaîne.

je veux que ce soit un tableau afin que je puisse y accéder par

this.value.name, this.value.age dans la fonction de remplissage.

est-ce possible?

21
mithunsatheesh

Vous ne pourrez pas stocker d'objets/tableaux dans l'attribut value, mais une option serait d'utiliser les attributs data-* Qui prennent en charge json automatiquement avec jQuery 1.4.3+

<select>
    <option data-value='{"name":"rajiv","age":"40"}'>a</option>
    <option data-value='{"name":"mithun","age":"22"}'>f</option>
</select>

Et en utilisant .change()

$("select").change(function(){
    alert($(this).find(":selected").data("value").age);
});

Exemple sur jsfiddle

28
Mark Coleman

Non, pas juste comme ça. Les valeurs doivent être des chaînes. Je recommanderais fortement d'utiliser quelque chose comme la méthode jQuerys .data() pour contenir Arrays ou Objects dans une propriété expando.

S'il doit être dans la valeur, il vous suffit de le décoder JSON (.parse):

var myValue = JSON.parse(this.value);

myValue.age; // 40
myValue.name // rajiv

Mais encore une fois, je ne pense pas que ce soit une bonne solution. Jetez un œil à http://api.jquery.com/jQuery.data/ De plus, jQuery convertira automatiquement les tableaux et les objets si vous placez les chaînes JSON dans n'importe quel data- Attribut HTML5. Par exemple:

<option value="A" data-info="{'name':'rajiv',age:'40'}">something</option>

Si vous accédez à ce nœud avec jQuery maintenant, nous avons automatiquement cet objet dans ses données expando

$('option').data('info').name; // === rajiv
9
jAndy

Vous pouvez utiliser parseJSON pour convertir la chaîne en un objet lors de son utilisation, mais la valeur doit être une chaîne.

  var option = $('select').val();
  var selected = $.parseJSON(option);
  alert( selected.name + ': ' + selected.age );
4
tvanfosson