根据
http://www.trirand.com/jqgridwiki/doku.php?id=wiki:search_config
值属性可以是对象:
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返回包含选择元素html的字符串,它起作用。
最佳答案
URL dataUrl
应返回带有<select>
和所有选项的HTML片段。回调buildSelect
允许使用dataUrl
,它以任何其他格式返回有关选项的信息,但是buildSelect
必须隐瞒dataUrl
对<select>
和所有选项的响应。您可以在buildSelect
的the old documentation中找到editoptions.buildSelect
回调的以下描述:
仅当设置了dataUrl参数时,此选项才相关。当。。。的时候
服务器响应无法建立选择元素,可以使用自己的
功能来建立选择。该函数应返回一个字符串
包含dataUrl中所述的select和options值
选项。传递给此函数的参数是服务器响应searchoptions.buildSelect
(请参阅here)的文档提供了几乎相同的信息。
换句话说,您尝试以错误的方式使用buildSelect
。返回buildSelect
的字符串必须包含<select>
的HTML片段,而不是as对象。另外,免费的jqGrid允许buildSelect
返回带有所有子选项的<select>
DOM元素或<select>
的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: function (response) {
var $tulem = $("<select><option value=''>All</option></select>");
$.each(JSON.parse(response).rows, function (i, item) {
$("<option></option>", { value: item.Artlnimi })
.text(item.Artlnimi)
.appendTo($tulem);
});
return $tulem;
}
关于javascript - 如何将选择选项作为对象从buildSelect返回,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41519701/