Код для установки значения опции окна выбора в качестве объекта
на 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 в функции filler.
Это возможно?
Ответы
Ответ 1
Вы не сможете хранить объекты/массивы в атрибуте value
, однако опция должна заключаться в использовании атрибутов data-*
, которые автоматически поддерживают json с помощью jQuery 1.4.3 +
<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);
});
Пример jsfiddle
Ответ 2
Нет, не просто так. Значения должны быть строками. Я настоятельно рекомендую использовать что-то вроде метода jQuerys .data()
для хранения Arrays
или Objects
в свойстве expando.
Если оно должно быть в значении, вам просто нужно выполнить JSON-декодирование (.parse):
var myValue = JSON.parse(this.value);
myValue.age; // 40
myValue.name // rajiv
Но опять же, я не думаю, что это хорошее решение. Посмотрите http://api.jquery.com/jQuery.data/
Кроме того, jQuery будет автоматически преобразовывать массивы и объекты, если вы поместите строки JSON в любой атрибут data-
HTML5. Например:
<option value="A" data-info="{'name':'rajiv',age:'40'}">something</option>
Если теперь вы получаете доступ к этому node с помощью jQuery, мы автоматически получаем этот объект в нем data expando
$('option').data('info').name; // === rajiv
Ответ 3
Вы можете использовать parseJSON, чтобы преобразовать строку в объект при ее использовании, но значение должно быть строкой.
var option = $('select').val();
var selected = $.parseJSON(option);
alert( selected.name + ': ' + selected.age );