Я ищу способ замены .val();
в jQuery с чем-то вроде .array
или .object
. Поэтому вместо того, чтобы получать только значение раскрывающегося списка, я могу вернуть полный массив для выбранного значения.
У меня есть раскрывающийся список, который позволяет пользователю выбирать несколько "игровых типов", я выводил это на экран, и когда пользователь нажимает кнопку, содержимое этих "игровых типов" должно быть отправлено как запрос JSON.
Код, который я сейчас использую, ниже, однако он возвращает только имя "gametype", поэтому, когда я запускаю код, я получаю "RPG" в консоли. Мне нужен полный объект, поэтому RPG, издатели, игры и т.д.
Ive посмотрел документацию API в jQuery и не может найти способ сделать это, возможно ли это с помощью jQuery?
Js Код:
$("#nextbutton").click(function () {
var datatosend = {
gametypes: [],
market: [] //This is populated using the same method however i don't need the whole object, just the name so this works
};
$("#comboGameType").find(":selected").each(function() {
var str = $(this).val();
datatosend.gametypes.push(str);
console.log(str);
});
});
Пример JSON:
{
"games": [{
"gameType": "RPG",
"publishers": [{
"publisher": "Square",
"titles": [{
"title": "Final Fantasy",
"gameReleases": [ 2006, 2008, 2010, 2012, 2013, 2014 ]
}]
}]
}]
}
Html довольно стандартный, он заполняется через js
<select id="comboGameType" class="selectpicker" multiple> </select>
JS для обработки изменений для выпадающего списка и отображения выбора:
$('#comboGameType').change(function () {
var values = $('#comboGameType').val();
var parsedData = JSON.parse($myData);
for (var i = 0; i < values.length; i += 1) {
$('#output').append("<div>" + values[i] + "</div>")
}
});
Вот скрипят, чтобы показать в качестве примера - когда вы просматриваете консоль, видно, что значение drop down возвращается, но я пытаюсь вернуть FULL-объект (так что все в RPG, например) http://jsfiddle.net/2Ma7U/
Вы можете использовать данные jQuery для хранения всего объекта и получения его позже.
$(parsedData.genres).each(function (i) {
$("#pubCombo").append($("<option/>", {
val: this.genre,
html: this.genre,
data: this
}));
});
$("#next").click(function () {
var datatosend = {
gametypes: [],
market: []
};
$("#pubCombo").find(":selected").each(function() {
var obj = $(this).data();
datatosend.gametypes.push(obj);
console.log(obj);
});
});
Обновлена скрипка http://jsfiddle.net/2Ma7U/1/