dateRangePicker не работает должным образом на jqGrid

У меня есть один 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. Вместо этого мне нужно снова выбрать текстовое поле фильтра и нажать Enter. И в следующий раз при выборе даты (дат) из всплывающего окна daterangepicker управление переходит к моему коду Java, но не с последними значениями. Чтобы получить последнее значение, я должен каждый раз нажимать Enter.

Итак, есть ли способ вызвать мой контроллер при выборе дат или я могу автоматически сфокусировать свое текстовое поле фильтра после выбора даты (дат), чтобы я каждый раз нажимал ввод. Я в порядке с нажатием Enter.

Я также пробовал с кодом ниже

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

person Jaikrat    schedule 27.05.2014    source источник


Ответы (1)


Мне пришлось решить эту проблему в настоящее время, и я нашел это:

В daterangepicker нет обработчиков событий onSelect, onClose. И вам нужно обновить фильтры jqGrid вручную перед перезагрузкой. Мое решение, которое работает для меня (даже если оно выглядит как взлом), таково.

    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}]);
        });
    }

Примечание: тип поля — «текст», и вы должны анализировать входную строку в формате «ММ/ДД/ГГГГ — ММ/ДД/ГГГГ». Источник: События daterangepicker

person Pavel Francírek    schedule 04.03.2015