Javascript 如何从buildSelect返回选择选项作为对象
据 值属性可以是对象:Javascript 如何从buildSelect返回选择选项作为对象,javascript,jquery,json,jqgrid,free-jqgrid,Javascript,Jquery,Json,Jqgrid,Free Jqgrid,据 值属性可以是对象: If set as object it should be defined as pair value:name - editoptions:{value:{1:'One',2:'Two'}} Json API返回Json对象 {"total":2,"page":1,"rows":[ {"Id":"L-10020","Liik":"10020","Artlnimi":"C vesinikud","Grupp":"L"}, {"Id":"L-1007
If set as object it should be defined as pair value:name - editoptions:{value:{1:'One',2:'Two'}}
Json API返回Json对象
{"total":2,"page":1,"rows":[
{"Id":"L-10020","Liik":"10020","Artlnimi":"C vesinikud","Grupp":"L"},
{"Id":"L-10072","Liik":"10072","Artlnimi":"C D-Perm","Grupp":"L"}
... ] }
Artlnimi属性值应用作搜索中的选择选项。
我试着用它来创建选择列表,使用免费的jqgrid 4.13.6
$grid.jqGrid('setColProp', 'Artliik_artlnimi', {
searchoptions : {
dataUrl: 'API/ArtliikL',
buildSelect: function(response){
var tulem={ '':'All' }, res=JSON.parse(response);
$.each(res.rows, function(i, item) {
tulem[item.Artlnimi]=item.Artlnimi;
}
);
return tulem;
},
sopt: ['eq']
},
stype:"select"
});
在那个错误之后
Uncaught TypeError: Cannot read property 'multiple' of undefined
at Object.success (jquery.jqgrid.src.js:9680)
at fire (jquery-1.12.4.js:3232)
at Object.fireWith [as resolveWith] (jquery-1.12.4.js:3362)
at done (jquery-1.12.4.js:9840)
at XMLHttpRequest.callback (jquery-1.12.4.js:10311)
发生在第9680行的免费jqgrid 4.13.6源代码中,其中包含:
if ($select[0].multiple && $select.find("option[selected]").length === 0 && $select[0].selectedIndex !== -1) {
如何修复此问题,以便搜索元素显示从buildSelect返回的对象中的数据。
Ifbild select返回包含其工作的select元素html的字符串。URL
dataUrl
应返回包含
和所有选项的html片段。回调buildSelect
允许使用dataUrl
,它以任何其他格式返回有关选项的信息,但是buildSelect
必须将dataUrl
的响应转换为
和所有选项。您可以在编辑选项的中找到buildSelect
回调的以下说明。buildSelect:
仅当设置了dataUrl参数时,此选项才相关。当
服务器响应无法生成select元素,您可以使用自己的
函数来构建选择。函数应该返回一个字符串
包含dataUrl中所述的选择和选项值
选项传递给此函数的参数是服务器响应
searchoptions.buildSelect
(请参阅)的文档提供了几乎相同的信息
换句话说,您试图以错误的方式使用buildSelect
。返回buildSelect
的字符串必须包含
的HTML片段,而不是as对象。或者,免费jqGrid允许buildSelect
返回带有所有子选项的
的DOM元素或
的jQuery包装器
您可以将代码修复为以下内容
buildSelect: function (response) {
var tulem = "<select><option value=''>All</option>";
$.each(JSON.parse(response).rows, function (i, item) {
var v = item.Artlnimi;
// the simplified form of the next statement would be
// tulem += "<option value='" + v + "'>" + v + "</option>";
// but one have to encode/escape the text in more common case.
tulem += "<option value='" +
String(v).replace(/\'/g, "'") + "'>" +
$.jgrid.htmlEncode(v) + "</option>";
});
return tulem + "</select>";
}
buildSelect:函数(响应){
var tulem=“全部”;
$.each(JSON.parse(response).rows,function(i,item){
var v=项目Artlnimi;
//下一句话的简化形式是
//郁金香+=“+v+”;
//但在更常见的情况下,必须对文本进行编码/转义。
郁金香+="URLdataUrl
应返回带有
和所有选项的HTML片段。回调buildSelect
允许使用dataUrl
,它以任何其他格式返回有关选项的信息,但buildSelect
必须将dataUrl
的响应转换为
和所有选项ons。您可以在editoptions.buildSelect
的中找到buildSelect
回调的以下说明:
仅当设置了dataUrl参数时,此选项才相关
服务器响应无法生成select元素,您可以使用自己的
函数生成select。函数应返回字符串
包含dataUrl中所述的选择和选项值
传递给此函数的参数是服务器响应
searchoptions.buildSelect
(请参阅)的文档提供了几乎相同的信息
换句话说,您试图以错误的方式使用buildSelect
。返回buildSelect
的字符串必须包含
的HTML片段,而不是as对象。或者,免费jqGrid允许buildSelect
返回
的DOM元素以及所有子选项或jQuery
您可以将代码修复为以下内容
buildSelect: function (response) {
var tulem = "<select><option value=''>All</option>";
$.each(JSON.parse(response).rows, function (i, item) {
var v = item.Artlnimi;
// the simplified form of the next statement would be
// tulem += "<option value='" + v + "'>" + v + "</option>";
// but one have to encode/escape the text in more common case.
tulem += "<option value='" +
String(v).replace(/\'/g, "'") + "'>" +
$.jgrid.htmlEncode(v) + "</option>";
});
return tulem + "</select>";
}
buildSelect:函数(响应){
var tulem=“全部”;
$.each(JSON.parse(response).rows,function(i,item){
var v=项目Artlnimi;
//下一句话的简化形式是
//郁金香+=“+v+”;
//但在更常见的情况下,必须对文本进行编码/转义。
tulem+=“此代码对显示值进行两次编码:第一次在v=$.jgrid.htmlEncode(item.Artlnimi)
中,第二次使用$.jgrid.htmlEncode(v)
。这可以吗?此代码对显示值进行两次编码:第一次在v=$.jgrid.htmlEncode(item.Artlnimi)
中,第二次使用$.jgrid.htmlEncode(v)
。这样可以吗?