2013-07-25 6 views
0

У меня возникла проблема с проверкой значения ячейки после встроенного редактирования и перед сохранением данных. Часть моей ColModel есть (без unnesessary коды):Проверьте значение ячейки перед отправкой данных на сервер

{name:'event_start_date',index:'event_start_date',width:75,align:'center',editable:true,edittype:'text',editoptions:{size:'10',maxlength:'10', 
     dataInit:function(el){ 
     $(el).mask('9999-99-99'); 
     $(el).datepicker({dateFormat:'yy-mm-dd', 
      beforeShow: function(input, instance){instance.dpDiv.css({marginTop: '1px'});}}) 
     }} 
    }, 
    {name:'event_start_time',index:'event_start_time',width:70,align:'center',editable:true,edittype:'text',editoptions:{size:'8',maxlength:'8', 
     dataInit:function(el){$(el).mask('99:99:99');}} 
    }, 
    {name:'event_end_date',index:'event_end_date',width:75,align:'center',editable:true,edittype:'text',editoptions:{size:'10',maxlength:'10', 
     dataInit:function(el){ 
     $(el).mask('9999-99-99'); 
     $(el).datepicker({dateFormat:'yy-mm-dd', 
      beforeShow: function(input, instance){instance.dpDiv.css({marginTop: '1 px'});}}) 
     }} 
    }, 
    {name:'event_end_time',index:'event_end_time',width:70,align:'center',editable:true,edittype:'text',editoptions:{size:'8',maxlength:'8', 
     dataInit:function(el){$(el).mask('99:99:99');}} 
    }, 
    {name:'event_dur_calc',index:'event_dur_calc',width:90,align:'center',editable:false,edittype:'text',sorttype:'date',editoptions:{size:'10',maxlength:'10'} 
    } 

Я использую двойной щелчок, чтобы получить режим встроенного редактирования. После того, как пользователь внести некоторые изменения в датах/время поле, новое значение вычисленного для ячейки «event_dur_calc»:

$('#'+rowId+'_event_start_date').focusout(function(){recalc_dur(rowId);}); 
$('#'+rowId+'_event_start_time').focusout(function(){recalc_dur(rowId);}); 
$('#'+rowId+'_event_end_date').focusout(function(){recalc_dur(rowId);}); 
$('#'+rowId+'_event_endt_time').focusout(function(){recalc_dur(rowId);}); 

функция Fo вычислений нового времени:

function mktime(){ 
    var i = 0, d = new Date(), argv = arguments, argc = argv.length; 
    var dateManip = { 
    0: function(tt){ return d.setHours(tt); }, 
    1: function(tt){ return d.setMinutes(tt); }, 
    2: function(tt){ return d.setSeconds(tt); }, 
    3: function(tt){ return d.setMonth(parseInt(tt)-1); }, 
    4: function(tt){ return d.setDate(tt); }, 
    5: function(tt){ return d.setYear(tt); } 
    }; 
    for(i = 0; i < argc; i++){ 
    if(argv[i] && isNaN(argv[i])){ 
     return false; 
    } else if(argv[i]){ 
     if(!dateManip[i](argv[i])){ 
     return false; 
     } 
    } 
    } 
    return Math.floor(d.getTime()/1000); 
}; 

function recalc_dur(rowId){ 
    var event_start_date_txt = $('#'+rowId+'_event_start_date').val(); 
    var event_start_time_txt = $('#'+rowId+'_event_start_time').val(); 
    var event_end_date_txt = $('#'+rowId+'_event_end_date').val(); 
    var event_end_time_txt = $('#'+rowId+'_event_end_time').val(); 

    if (event_end_date_txt=='0000-00-00'){ 
    $('#'+rowId+'_event_dur_calc').val('0000:00:00'); 
    }else{ 
    var start_d_pices = event_start_date_txt.split('-'); 
    var start_t_pices = event_start_time_txt.split(':'); 
    var end_d_pices = event_end_date_txt.split('-'); 
    var end_t_pices = event_end_time_txt.split(':'); 
    var start_time = mktime(start_t_pices[0], start_t_pices[1], start_t_pices[2], start_d_pices[1], start_d_pices[2], start_d_pices[0]); 
    var end_time = mktime(end_t_pices[0], end_t_pices[1], end_t_pices[2], end_d_pices[1], end_d_pices[2], end_d_pices[0]); 
    var delta = end_time-start_time; 
    var secs = delta % 60; 
    delta = (delta - secs)/60; 
    if (secs.toString().length==1) var new_dur = ':0'+secs; else var new_dur = ':'+secs; 
    var mins = delta % 60; 
    delta = (delta - mins)/60; 
    if (mins.toString().length==1) new_dur = ':0'+mins+new_dur; else new_dur = ':'+mins+new_dur; 
    var hours = delta; 
    if (hours.toString().length==1){new_dur = '000'+hours+new_dur; 
    }else if (hours.toString().length==2){new_dur = '00'+hours+new_dur; 
    }else if (hours.toString().length==3){new_dur = '0'+hours+new_dur; 
    }else new_dur = hours+new_dur; 
    $('tr[id=\"'+rowId+'\"] > td[aria-describedby=\"dfr_event_dur_calc\"]').html(new_dur); 
    } 
} 

Если новое время вычисления будет ниже нуля (когда дата начала/время больше, чем дата/время окончания), модальное окно с предупреждающим сообщением является списком, и данные не могут быть сохранены и отправлены на сервер.

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

ответ

0

В текущем коде jqGrid на github содержится beforeSaveRow функция обратного вызова, которая будет вызываться перед сохранением. Изменения были сделаны после публикации jqGrid 4.5.2, но эта функция будет существовать в следующей версии (> 4.5.2) jqGrid. Поэтому, если вы не хотите использовать источники для разработчиков из github, вы можете использовать стандартный способ проверки: использование editrules с custom: true и custom_func, которые выполняют проверку.

Смежные вопросы