jqGrid DatePicker не инициализируется в диалоге сложного поиска - PullRequest
0 голосов
/ 24 февраля 2012

У меня есть jqGrid с «multipleSearch = true» и «multipleGroup = true», чтобы разрешить сложный поиск.

У меня установлен «стиль» для столбцов (в моем случае это включает «дату»), "text", "integer" и "currency").

Я также предоставил функции dataInit для плагинов DatePicker и AutoComplete для столбцов "date" и "text" соответственно.

Когда я открываю диалог поиска, вызывается функция автозаполнения «dataInit», но не функция «DataInit» DatePicker.

Это происходит потому, что функция «dataInit» запускается при создании нового фильтраи основан на «типе» первого столбца.

(Я подозреваю, что он срабатывает, когда пользователь выбирает столбец из выпадающего списка в диалоге поиска.)

Есть лиспособ отображения DatePicker, когда пользователь хочет выполнить поиск в поле «date» и отключить его для других «стилей» поля?

Я включил соответствующие фрагменты кода ниже:

var DatePickerCfg = { id: 'DatePicker',dateFormat: 'dd/mm/yy',minDate: new Date(1990,0,1),maxDate: new Date(2099,12,31),showOn: 'focus' };
var AutoCompleteCfg = { id: 'AutoComplete',source: '' };



var formatoptions = {};
var searchoptions = {};


else if (Field['Type'] == '[datetime]')
{
 stype = 'date';
 formatoptions = {srcformat: 'Y-m-dTH:i:s', newformat: 'd/m/Y g:i:s A'};
 searchoptions = {sopt: ['eq','ne','lt','le','gt','ge'], dataInit: function(el) {setTimeout(function() {jQuery(el).datepicker(DatePickerCfg);}, 200);}};
}
else {searchoptions = {sopt: ['eq','ne','lt','le','gt','ge','bw','bn','ew','en','cn','nc'], dataInit:function(el) {setTimeout(function() {jQuery(el).autocomplete(AutoCompleteCfg);},200);}};}

colModel.push({name:Field['Field'], index:Field['Field'], align:Field['Align'], sortable:true, stype:stype, formatter:stype, formatoptions:formatoptions, searchoptions:searchoptions});

Ответы [ 2 ]

0 голосов
/ 08 марта 2012

Это была моя ошибка ... Я установил стиль в моем столбце даты как "дата" вместо "текст".Стиль - это тип ввода в диалоговом окне поиска, а не тип данных.(Я обнаружил это путем обхода исходного кода)

0 голосов
/ 25 февраля 2012

Мне не приходилось использовать диалоговое окно поиска, но у меня была похожая проблема при использовании встроенного редактирования.Проблема в том, что DatePicker должен знать элемент DOM, на который он будет действовать.DataInit срабатывает рано.Я уверен, что именно поэтому вы используете функцию setTimeout, которую в документации можно использовать в качестве альтернативы - странно, она не работает.

Я решил это, выполнив следующее:

colModel:[ {classes:'applyDatePicker',edittype:"checkbox"

Когда строка переходит в режим редактирования, появляется функция обратного вызова

function onEditRow(rowId) { 
    var dp = jQuery('.applyDatePicker>input[type="text"]');
    jQuery(dp).each(function () {
        jQuery(this).bind('click', function () {
            jQuery(this).datepicker();
            jQuery(this).focus();
        });
    });
}

Возможно, вы можете использовать аналогичный подходно вместо этого применить его в функции обратного вызова afterShowSearch?

...