私が持っているhtmlページに、値のあるこのような選択ボックスがあります。
<select onChange="return filler(this.value);">
<option value="{'name':'rajiv',age:'40'}">a</option>
<option value="{'name':'mithun',age:'22'}">f</option>
</select>
オプションの値としてJavaScriptの配列またはオブジェクトを渡したいのですが。現在、オプション値を文字列として扱っています。
配列にして、アクセスできるようにしたい
フィラー関数のthis.value.name、this.value.age。
これは可能ですか?
オブジェクト/配列をvalue
属性に格納することはできませんが、jQuery 1.4.3以降でjsonを自動的にサポートする_data-*
_属性を使用するオプションがあります
_<select>
<option data-value='{"name":"rajiv","age":"40"}'>a</option>
<option data-value='{"name":"mithun","age":"22"}'>f</option>
</select>
_
そして.change()
を使う
_$("select").change(function(){
alert($(this).find(":selected").data("value").age);
});
_
いいえ、それだけではありません。値は文字列でなければなりません。私は、jQueryの.data()
メソッドのようなものを使用して、Arrays
またはObjects
をexpandoプロパティに保持することを強くお勧めします。
値に含める必要がある場合は、JSONデコード(.parse)するだけです。
var myValue = JSON.parse(this.value);
myValue.age; // 40
myValue.name // rajiv
しかし、これも良い解決策ではないと思います。 http://api.jquery.com/jQuery.data/ もご覧ください。また、JSON文字列をdata-
HTML5属性。例えば:
<option value="A" data-info="{'name':'rajiv',age:'40'}">something</option>
ここでjQueryを使用してそのノードにアクセスすると、そのオブジェクトにデータが自動的に展開されます。
$('option').data('info').name; // === rajiv
parseJSON を使用すると、使用時に文字列をオブジェクトに変換できますが、値は文字列である必要があります。
var option = $('select').val();
var selected = $.parseJSON(option);
alert( selected.name + ': ' + selected.age );