код для установки значения параметра окна выбора в качестве объекта - PullRequest
19 голосов
/ 04 июля 2011

на 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 в функции наполнителя.

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

Ответы [ 3 ]

26 голосов
/ 04 июля 2011

Вы не сможете хранить объекты / массивы в атрибуте 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

8 голосов
/ 04 июля 2011

Нет, не просто так.Значения должны быть строками.Я настоятельно рекомендую использовать метод jQuerys .data() для хранения Arrays или Objects в свойстве expando.

Если оно должно быть в значении, вам просто нужно JSON decode (.разбор) это:

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>

Если вы сейчас обращаетесь к этому узлу с помощью jQuery, мы автоматически получаем этот объект в его данных.

4 голосов
/ 04 июля 2011

Вы можете использовать parseJSON для преобразования строки в объект при ее использовании, но значение должно быть строкой.

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