【问题标题】:Jqgrid search toolbar filter unique drop lists with JsonJqgrid 搜索工具栏使用 Json 过滤唯一的下拉列表
【发布时间】:2011-10-24 20:11:40
【问题描述】:

我创建了一个基于此 example 的过滤器工具栏。我有一个奇怪的问题;这仅在我设置了 firebug 断点时才有效,否则,下拉列表仅显示“全部”。网格设置为 datatype:'json', loadonce:true。还有一点;这个网格也有一个子网格。知道如何让它发挥作用吗?

 grid = $("#dealsgrid"),
 getUniqueNames = function(columnName) {
       var texts = grid.jqGrid('getCol', columnName); 
       var uniqueTexts = [];
       var textsLength = grid.jqGrid('getGridParam','data');
       var text, textsMap = {}, i;
       for (i = 0; i < textsLength; i++) {
          text = texts[i];
          if (text !== undefined && textsMap[text] === undefined) {
            // to test whether the texts is unique we place it in the map.
            textsMap[text] = true;
            uniqueTexts.push(text);
          }
       }
       return uniqueTexts;
     }, 
 buildSearchSelect = function(uniqueNames) {
       var values = ":All";
       $.each(uniqueNames, function() {
          values += ";" + this + ":" + this;
       });
      return values;
   }, 
 setSearchSelect = function(columnName) {
      grid.jqGrid(
        'setColProp',
        columnName,
        {
            stype : 'select',
            searchoptions : {
                value : buildSearchSelect(getUniqueNames(columnName)),
                sopt : [ 'eq' ]
            }
        });
 };

我声明网格后,我的列模型是这样的:

    colModel:[ 
               {name:'CM',index:'CM', width:50,editable:false},
               {name:'DealNo',index:'DealNo',width:75,editable:false,editoptions:{readonly:true, size:10},search:true, stype:'text', searchoptions: { sopt: ['eq']}},
               {name:'KeyDate',index:'KeyDate',width:100, search:false, align:"right",formatter:'date'},
               {name:'VendorNo',index:'VendorNo', width:75,search:true},
               {name:'VendorName',index:'VendorName', width:100,search:true},
               {name:'ItemQty',index:'ItemQty', width:75,search:false},{name:'StartDate',index:'StartDate',width:100,align:"right",formatter:'date',search:false},
               {name:'EndDate',index:'EndDate',width:100, align:"right",formatter:'date',search:false},
               {name:'ActiveStartDate',index:'ActiveStartDate',width:100, align:"right",formatter:'date',search:false, sorttype:"date", editable:true,editoptions:{size:10}},                   {name:'ActiveEndDate',index:'ActiveEndDate',width:100,align:"right",formatter:'date',search:false, sorttype:"date",editable:true,editoptions:{size:10}},             
               {name:'DealType',index:'DealType', width:75,search:false}

           ],

最后,我调用创建 filterToolBar 并填充下拉列表

        setSearchSelect('CM'); 
        grid.jqGrid('setColProp', 'Name', {
        searchoptions : {
            sopt : [ 'cn' ],
            dataInit : function(elem) {
               $(elem).autocomplete({
                  source : getUniqueNames('Name'),
                  delay : 0,
                  minLength : 0
               });
           }
        }

    });
    grid.jqGrid('filterToolbar', {
       stringResult : true,
       searchOnEnter : true,
       defaultSearch : "eq"
    });

任何建议将不胜感激。 谢谢

【问题讨论】:

  • 能否请您用 jsfiddle 重现您的问题,以便我们看看。我已经为您创建了一个包含适当资源(css 和 js)的文件 - jsfiddle.net/yTX3P/1 不要忘记保存它。
  • @Martijn B 我的代码可在link获得
  • 您的示例没有重现该问题。没有可用的数据。我不能用这种方式帮助你。您可以尝试在 getUniqueNames 方法的 return uniqueTexts 上放置一个断点,并检查正在返回哪些值。如果这是空的,你必须专注于 getUniqueNames 方法。
  • @Martijn B 当我在 return uniqueTexts 上设置中断时,我什么也得不到,但是,当我在 setSearchSelect('CM'); 上设置中断时,我什么也得不到。我得到了唯一名称的列表。我不需要单步执行代码,我只需要点击运行。我是否可能需要在某处放置等待语句?

标签: jquery jquery-plugins jqgrid


【解决方案1】:

删除了我的旧答案,现在我们知道您的函数正在返回某些内容(如果您在其上放置断点)。可能是您的网格在调用 getUniqueNames 之前尚未加载数据吗?这说明如果在其上放置断点,则在调用 getUniqueNames 之前它有更多时间加载数据。

因此,如果您在 gridComplete 或什至 loadComplete 中调用 setSearchSelect 应该没问题。也许您甚至必须将网格的 async 属性设置为 false。我需要用我自己的代码来检查,所以我可以为你提供一个例子。我会在早上做这第一件事。同时,您可以根据上述信息进行一些调整,自己尝试一下。

   $('#yourgrid').jqGrid({
    ...,
    async: false,
    loadComplete/gridComplete: function() { setSearchSelect('CM'); }
   });

【讨论】:

  • 是的,我注意到在我提出的示例中并对其进行了编辑,以便 var textsLength = texts.length var results 如果没有中断则返回 [],否则返回 ["MR ", "CW", "TB"]
  • 感谢您的帮助 - 我终于成功了!事实证明,我必须将所有内容都放在 loadComplete 函数 async: false, loadComplete:function(){ setSearchSelect('CM'); $("#dealsgrid").setColProp('Name', {searchoptions : {sopt : [ 'cn' ],dataInit : function(elem) {$(elem).autocomplete({source : getUniqueNames('Name'),延迟:0,minLength:0});}}}); $("#dealsgrid").jqGrid('filterToolbar', {stringResult : true,searchOnEnter : true,defaultSearch : "cn"}); },
猜你喜欢
  • 2015-05-29
  • 1970-01-01
  • 2012-06-13
  • 1970-01-01
  • 2011-07-29
  • 2015-04-28
  • 2012-02-15
  • 1970-01-01
  • 2012-06-04
相关资源
最近更新 更多