Подтвердить что ты не робот

Код для установки значения опции окна выбора в качестве объекта

на 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.

Это возможно?

4b9b3361

Ответ 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 );