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, "&#39;") + "'>" +
            $.jgrid.htmlEncode(v) + "</option>";
    });

    return tulem + "</select>";
}
buildSelect:函数(响应){
var tulem=“全部”;
$.each(JSON.parse(response).rows,function(i,item){
var v=项目Artlnimi;
//下一句话的简化形式是
//郁金香+=“+v+”;
//但在更常见的情况下,必须对文本进行编码/转义。

郁金香+="URL
dataUrl
应返回带有
和所有选项的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, "&#39;") + "'>" +
            $.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)
。这样可以吗?