highlight error cell or input when validation fails in jqgrid

前端 未结 2 1726
不思量自难忘°
不思量自难忘° 2020-11-29 10:52

I am using jqgrid inline editing with validation in grid using edit rules . i want to add class to highlight errors(eg: ui-state-error) for the input which fails in valid

2条回答
  •  死守一世寂寞
    2020-11-29 11:31

    The demo shows how the probelm can be solved:

    enter image description here

    In the demo the columns "Amount", "Tax" and "Total" will be validated with the following validation rule:

    editrules:{required:true,number:true}
    

    On any validation error the first input field where the validation failed dditional class "ui-state-error" will be added. It is the standard jQuery UI CSS class. Addionally I set focus to the input field.

    For the implementation I overwride (chain) the default implementation of the methods $.jgrid.checkValues and $.jgrid.hideModal. Here is the corresponding code:

    var grid = $("#list");
    grid.jqGrid({
        // define all jqGrid options
    });
    
    var originalCheckValues = $.jgrid.checkValues,
        originalHideModal = $.jgrid.hideModal,
        iColWithError = 0;
    $.jgrid.checkValues = function(val, valref,g, customobject, nam) {
        var tr,td,
            ret = originalCheckValues.call(this,val, valref,g, customobject, nam);
        if (!ret[0]) {
            tr = g.rows.namedItem(editingRowId);
            if (tr) {
                $(tr).children('td').children('input.editable[type="text"]').removeClass("ui-state-error");
                iColWithError = valref; // save to set later the focus
                //error_td_input_selector = 'tr#'+editingRowId+' > td:nth-child('+(valref+1)+') > input.editable[type="text"]:first';
                td = tr.cells[valref];
                if (td) {
                    $(td).find('input.editable[type="text"]').addClass("ui-state-error");
                }
            }
        }
        return ret;
    };
    $.jgrid.hideModal = function (selector,o) {
        var input, oldOnClose, td,
            tr = grid[0].rows.namedItem(editingRowId);
        if (tr) {
            td = tr.cells[iColWithError];
            if (td) {
                input = $(td).children('input.editable[type="text"]:first');
                if (input.length > 0) {
                    oldOnClose = o.onClose;
                    o.onClose = function(s) {
                        if ($.isFunction(oldOnClose)) {
                            oldOnClose.call(s);
                        }
                        setTimeout(function(){
                            input.focus();
                        },100);
                    };
                }
            }
        }
        originalHideModal.call(this,selector,o);
    };
    

提交回复
热议问题