根据

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>和所有选项的响应。您可以在buildSelectthe 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, "&#39;") + "'>" +
            $.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/

10-11 04:49