highlight error cell or input when validation fails in jqgrid

前端 未结 2 1703
不思量自难忘°
不思量自难忘° 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:18

    In my project, I combine to use jqgrid and jquery validation plugin to examine and highlight errors, to provide unified look and feel in the entire application. You can use rowId_columnName as id to find the editor (input, select, etc.), e.g. $('#1_name') for name column in row 1 and then use the jquery object to add a rules, e.g. $('#1_name').rules('add', {required:true}) to add a rule to enforce that the cell is required, then calling $('#1_name').valid() to force a validation pass when value is submitted, e.g. before calling jqgrid saveRow method. Open the link for the plugin to know more about rules method and valid method.

    0 讨论(0)
  • 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);
    };
    
    0 讨论(0)
提交回复
热议问题