Как мы можем получить выбранную optgroup и параметры в массиве с JavaScript или jQuery. Мне нужно получить как optgourp, так и опцию в массив, но только выбранные.
<select id="release">
<optgroup label="group1">
<option>option 1</option>
<option>option 2</option>
</optgroup>
<optgroup label="group2">
<option>option 3</option>
<option>option 4</option>
</optgroup>
</select>
var releasearr = {};
var theSelect = document.getElementById('release');
var optgroups = theSelect.getElementsByTagName('optgroup');
for (var i = 0; i < optgroups.length; i++) {
releasearr[optgroups[i].getAttribute('label')] = [];
var options = optgroups[i].getElementsByTagName('option');
for (var j = 0; j < options.length; j++) {
releasearr[optgroups[i].getAttribute('label')].push(options[j].innerHTML);
}
}
console.log(releasearr);
в кнопке поиска html
в javascript
var requestString = "?re_type="+document.getElementById('route').value+"&platform="+document.getElementById('platform').value+"&baserelease="+document.getElementById('bsrel').value+"&release="+releasearr+"&release_type="+document.getElementById('type').value+"&rpd_bit="+document.getElementById('rpd_bit').value;;
и переход к url ='/rbusnp/controller/releasecompresult.php'+requestString;
в значениях, которые я получаю release, это как [объект объекта], не получающий значения
Я использую несколько вариантов для этого выпадающего меню. но когда я выбираю одну группу opt и два варианта, она возвращает только одну optgroup и один параметр, как получить массив для нескольких выборов.
Попробуй это,
var releasearr = {};
var theSelect = document.getElementById('release');
var optgroups = theSelect.getElementsByTagName('optgroup');
var arr = {};// object for selected options
for (var i = 0; i < optgroups.length; i++) {
l=optgroups[i].getAttribute('label');
releasearr[l] = [];
var options = optgroups[i].getElementsByTagName('option');
for (var j = 0; j < options.length; j++) {
releasearr[l].push(options[j].innerHTML);
if(options[j].selected){ // check if options is selected
arr[l]= [];// making array of optgroup
arr[l].push(options[j].innerHTML);
}
}
}
console.log(releasearr);
// selected options array
console.log(arr);
Используя jquery, вы можете попробовать это,
var arr= {};
$('#release option:selected').each(function(){
arr[$(this).closest('optgroup').attr('label')] = $(this).text();
});
console.log(arr);
Обновленный, вы должны использовать JSON.stringify() для передачи вашего object
в виде string
например,
route=document.getElementById('route').value;
platform=document.getElementById('platform').value;
bsrel=document.getElementById('bsrel').value;
type=document.getElementById('type').value;
rpd_bit=document.getElementById('rpd_bit').value;
var requestString = "?re_type="+route+"&platform="+platform+"&baserelease="+bsrel;
requestString += "&release_type="+type+"&rpd_bit="+rpd_bit;
requestString += "&release="+JSON.stringify(releasearr);// use stringify here
Для выбора всей option
в selected option from optgroup
попробуйте это,
var arr= {};
$('#release option:selected').each(function(){
var newArr=[];
$(this).closest('optgroup').find('option').each(function(){
newArr.push($(this).text());
});
arr[$(this).closest('optgroup').attr('label')] = newArr;
});
console.log(arr);
В JQuery довольно легко:
var $optionSelected = $('option:selected');
var optGroup = $optionSelected.parents('optgroup');
Еще лучше, если у вас есть элемент select и используйте.find()
arr
являетсяobject
поэтому он не будет отображаться вalert
вы можете проверитьconsole only
вconsole only