Я хочу получить значения идентификатора списка множественного выбора . Список множественного выбора генерируется динамически . Как получить эти значения? Если я смогу получить значения, значит, могу ли я преобразовать его в объект JSON или он будет получен как объект JSON !!!!

Вот мой код, чтобы генерировать его динамически.

function displayMultipleList() {
    EmployeeManagement.getResponseList(function (respList) {
        var respOptionsSelect = document.getElementById('respOptions');
        var searchOptions = null;
        for (var i = 0; i < respList.length; i++) {
            var resp = respList[i];
            selectOptions = document.createElement('option');
            selectOptions.value = resp.respID;
            selectOptions.innerHTML = resp.respName;
            respOptionsSelect.appendChild(selectOptions);
        }


    });
}

Спасибо.

0
user405398 31 Авг 2010 в 22:39

4 ответа

Лучший ответ

Принимая неоднозначность вопроса в качестве проблемы, вот два варианта.

Вы спрашиваете «как получить значения» и «преобразовать его в объект JSON». Принимая это буквально и игнорируя упоминание id, вы можете просто сделать это:

var x = JSON.stringify( $('#respOptions').val() );

... который даст вам простой (JSON) массив выбранных значений:

["somevalue","anothervalue"]

Но если под «получить значения идентификаторов» вы подразумеваете «получить идентификаторы и значения выбранных опций», то вы можете сделать что-то вроде этого:

var y = $('#respOptions option:selected').map( function(i,el){
    var result = {};
    result[ el.id ] = $(el).val();
    return result;
}).get();
y = JSON.stringify(y);

... который даст вам такой массив:

[{"id1":"somevalue"},{"id5":"anothervalue"}]

Я собрал скрипку, которая делает предположения о вашем HTML, и насмехается над respList из которого параметры добавляются динамически. Это решает проблему в обе стороны.

Если ваш браузер не поддерживает JSON.stringify, вы можете использовать часто рекомендуемый Крокфордом

Ken Redler 31 Авг 2010 в 20:21

Множественный выбор и если вы хотите идентификатор в формате массива fiddle Пример здесь

var countries = [];
$.each($(".country option:selected"), function() {
  countries.push($(this).attr("id"));
});
alert(countries.join(", "));
1
LeRoy 13 Янв 2016 в 14:39

Вот как вы перебираете список опций внутри элемента select и получаете идентификаторы:

http://jsfiddle.net/bXUhv/

Короче говоря:

$('option', $('#optionlist')).each(function() {
    alert($(this).attr('id'));
});​

Что касается преобразования любых данных в объект JSON, ознакомьтесь с этой библиотекой jQuery,

1
treeface 31 Авг 2010 в 18:57

Вы можете использовать функцию serializeArray() :

$("#respOptions").serializeArray()

Он вернет вам выбранные объекты в массиве JavaScript, который можно легко преобразовать в строку JSON.

Если ваш элемент <select> выглядит следующим образом (не забудьте атрибут name, так как это нужно для serializeArray!):

<select name="respOptions" id="respOptions" multiple="true">
 <option value="1">one</option>
 <option value="2">two</option>
 <option value="3">three</option>
</select>

Если бы пункты 2 и 3 были выбраны, вы получили бы это обратно из функции:

[{ name: "respOptions", value: "2"}, {name: "respOptions", value: "3"}]

РЕДАКТИРОВАТЬ - я забыл добавить атрибут name к элементу <select>. Извините за путаницу.

2
David Hoerster 31 Авг 2010 в 19:08