我正在使用ASP.NET 3.5进行ajax调用以填充下拉列表作为级联下拉列表的一部分,并且它工作正常,我正在获得JSON格式的结果。但我没有运气填充下拉调用此功能:
$.fn.populateSelect = function(data)
{
if( data.length > 0)
{
var dropDown = this;
dropDown.empty().append('<option selected = "selected" value="0">(Select Item)</option>');
$.each(data, function()
{
dropDown.append($("<option></option>").val(this.Key).text(this.Value));
});
}
}
总是在最后一行给出“对象不支持此属性或方法”。我从AJAX调用中获取的数据,这是一个C#序列化的KeyValuePairs列表,通常如下所示:
[{"Key":1,"Value":"Anchor Fixation"},{"Key":3,"Value":"Ankle Arthroplasty"},{"Key":19,"Value":"Disc Arthroplasty"},{"Key":20,"Value":"Elbow Arthroplasty, "},{"Key":23,"Value":"Fracture Fixation/ Bone Fixation"},{"Key":32,"Value":"Hip Arthroplasty,"},{"Key":38,"Value":"Knee Arthroplasty"},{"Key":55,"Value":"Radial Head Arthroplasty"},{"Key":59,"Value":"Screw/Rod/Wire/Pin"},{"Key":60,"Value":"Shoulder Arthroplasty"},{"Key":61,"Value":"Silastic Implant"},{"Key":65,"Value":"Spine fusion/fixation"},{"Key":74,"Value":"Wrist Arthroplasty"}]
我做错了什么?
答案 0 :(得分:0)
更新了答案
<小时/> 如果它的ASP.NET 3.5那么响应肯定会包含在“d”中。所以尝试这样的事情。
$.fn.populateSelect = function (msg) {
var data = msg.hasOwnProperty('d') ? msg.d : msg;
if (data.length > 0) {
var output = [];
output.push('<option selected = "selected" value="0">(Select Item)</option>');
$.each(data, function (idx, val) {
output.push('<option value="' + val.Key + '">' + val.Value + '</option>');
});
$(this).html(output.join(''));
}
}
在this
内更改了jQuery.each
这是更优化的。因为在您的方法中,您正在操纵DOM以添加每个option
现在,像这样称呼它
$(document).ready(function () {
var values = [{ "Key": 1, "Value": "Anchor Fixation" }, { "Key": 3, "Value": "Ankle Arthroplasty" }, { "Key": 19, "Value": "Disc Arthroplasty"}];
$("#myselect").populateSelect(values);
});
我不明白为什么这对你不起作用。 Click here to see the updated working example。
这是浏览器特定的问题吗?
答案 1 :(得分:0)
使用像Firebug这样的调试工具并检查dropDown和'this'的成员变量,它会给你错误,因为你得到的错误是对象的成员变量是未知的。