我的问题很简单,但我没有找到这样做的明确例子。 我正在尝试为选择添加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
}
);
});
任何帮助将不胜感激! 谢谢!
答案 0 :(得分:16)
好的,所以我最终自己想出了解决方案,但是,感谢你们的有用提示。 这是工作代码:
$('#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
}
答案 1 :(得分:1)
使用此
$.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函数中使用响应..(确保你有你想要的格式的响应)..