0

我有一个 jqgrid,其中一列说“UpdateTime”。我正在对其应用过滤器并使用以下代码完美地获得一个 DateRangePicker 弹出窗口。

{name:'updateTime',index:'updateTime',width:90,hidden:false,search:true,align:'center',stype:"text", 
    searchoptions:{dataInit:function(el){
        $(el).daterangepicker({ 
        dateFormat:'mm/dd/yy', 
        beforeShow: function(input, inst) {
            $.datepicker._pos = $.datepicker._findPos(input); 
            $.datepicker._pos[0] = center; 
            $.datepicker._pos[1] = center; 
        }, 
       onClose: function(event) {
         jQuery("#myGrid").trigger("reloadGrid");
       }                                                 
     });
    } 
   }
  },

我有

$("#myGrid").jqGrid('filterToolbar', {autoSearch:true,searchOnEnter:true});

问题是,在选择日期时,过滤器的文本框会填充值,但控制权不会出现在我的 java 代码中。相反,我必须再次选择过滤器文本框并按回车键。并且到下次从 daterangepicker 弹出窗口中选择日期时,控制权来自我的 java 代码,但不是最新的值。为了获得最新的值,我每次都必须输入。

那么,有什么方法可以在选择日期时调用我的控制器,或者我可以在选择日期之后自动聚焦我的过滤器文本框,这样我每次都会按 Enter 键。我可以按 Enter 键。

我也试过下面的代码

onSelect: function (dateText, inst) {
    $("#myGrid")[0].trigger("reloadGrid");
}
4

1 回答 1

0

我目前必须解决这个问题,我发现了这个:

daterangepicker 中没有 onSelect、onClose 事件处理程序。并且您必须在重新加载之前手动更新 jqGrid 过滤器。我的解决方案对我有用(如果它看起来像 hack)就是这个。

    grid = jQuery("<table>").attr('id', myId+"_grid");
    var datePick = function(elem)
    {
       jQuery(elem).daterangepicker({
           dateFormat:"MM/DD/YYYY"
       });
       jQuery(elem).on('apply.daterangepicker', function(ev, picker) {
            var d = picker.startDate.format('MM/DD/YYYY') + ' - ' + picker.endDate.format('MM/DD/YYYY');
            var f = {groupOp:"AND",rules:[]};
            f.rules.push({field:"time_submit",op:"eq",data:d});
            grid[0].p.search = true;
            jQuery.extend(grid[0].p.postData,{filters:JSON.stringify(f)});
            grid.trigger("reloadGrid",[{page:1,current:true}]);
        });
    }

注意:字段类型为“文本”,您必须以“MM/DD/YYYY - MM/DD/YYYY”格式解析输入字符串来源:daterangepicker 事件

于 2015-03-04T10:24:50.687 回答