Добавьте optgroup с опциями для выбора с помощью jQuery
Мой вопрос прост, но пока я не нашел четкого примера того, как это сделать. Я пытаюсь добавить optgroup для выбора и заполнить его параметрами, используя jquery, по некоторым причинам это не работает. это мой код:
$('#ptype').change(function() {
$.post(
"/sell/site/index/categories",
{
'parent_id': $('#ptype').val()
},
function(response){
var categories = $.parseJSON(response);
$('#sub_category').empty();
$.each(categories, function (index) {
var optgroup = $('<optgroup/>');
$.each(this.children, function (index) {
optgroup.add($("<option></option>")
.attr("value",index)
.text(this));
});
$("#sub_category").append(optgroup);
});
$("#sub_category").multiselect('refresh'); //refresh the select here
}
);
});
Любая помощь будет принята с благодарностью! Спасибо!
2 ответа
Итак, в конце концов я сам нашел решение, спасибо за полезные советы от вас, ребята. вот рабочий код:
$('#ptype').change(
function() {
$.ajax({
type: 'POST',
url: "/sell/site/index/categories",
data: { 'parent_id': $('#ptype').val() },
success: function(data){ updateCategories(data); },
dataType: 'json'
})
}
);
function updateCategories(categories){
$('#sub_category').empty();
$.each(categories, function (index) {
var optgroup = $('<optgroup>');
optgroup.attr('label',categories[index].name);
$.each(categories[index].children, function (i) {
var option = $("<option></option>");
option.val(i);
option.text(categories[index].children[i]);
optgroup.append(option);
});
$("#sub_category").append(optgroup);
});
$("#sub_category").multiselect('refresh'); //refresh the select here
}
Использовать этот
$.each($(this).children(), function (index) {
вместо
$.each(this.children, function (index) {
this
ссылается на сам элемент DOM; $(this)
оборачивает элемент в объект jQuery.
и вам не нужно использовать parseJson..(если вы указали ответ как json (dataType)).
var categories = $.parseJSON(response);
пройдите этот http://api.jquery.com/jQuery.post/. вы можете напрямую использовать ответ в функции $.each.. (убедитесь, что вы получили ответ в формате, который вы хотели)..