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?
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);
});
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
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 );