【问题标题】:how to implement jqgrid inline editing and custom validation?如何实现 jqgrid 内联编辑和自定义验证?
【发布时间】:2012-12-07 16:35:53
【问题描述】:

我是 jqGrid 的新手,我正在尝试实现以下场景,但我无法以正确的方式获得它。

这是我的场景:

  1. 我有三行,例如个人电子邮件、手机号码和推特网址。它需要有另一个列数据类型,可能是电子邮件、电话和 url 等值。
  2. 现在我将输入需要执行的每一行的值 验证,例如电子邮件格式或电话格式。
  3. 当我按下添加按钮时,它需要创建一个新行并询问我的信息 每列,例如列名和数据类型。
  4. 当我输入每一行的值时,需要根据 数据类型列。
  5. 如果我按下编辑按钮,整个网格需要可编辑并且 需要在编辑事件触发后对每个单元格执行验证。

我的代码:

    $(document).ready(function () {
        //debugger;
        var val;
        var lastsel2;
        jQuery("#list").jqGrid({
            datatype: "local",
            height: 250,
            width: 770,
            colNames: ['Mechanism', 'Data Type', 'Value', 'Active Flag', 'Created'],
            colModel: [
            { name: 'Mechanism', index: 'Mechanism', width: 175, editable: true },
            { name: 'DataType', index: 'Datatype', width: 175, editable: true },
        { name: 'Value', index: 'Value', width: 105, editable: true, editrules: { custom: true, custom_func: validate} },
        {name: 'ActiveFlag', width: 112, formatter: "checkbox", formatoptions: { disabled: false }, editable: true, edittype: "checkbox" },
        { name: 'Created', index: 'Created', width: 124}]
        });
$('#save').live('click', function () {
            var ids = $("#list").jqGrid('getDataIDs');
            for (var i = 0; i < ids.length; i++) {
                var val = $("#list").jqGrid('getCell', ids[i], 'Value');
                var dataType = $("#list").jqGrid('getCell', ids[i], 'DataType');
                $('#colValue').html(val + dataType);
                var va = $('#colValue').find('input[name=value]').val();
                var daT = $('#colValue').find('input[name=Datatype]').attr('value');

                switch (daT) {
                    case "Phone":
                        if (!$.jgrid.isEmpty(va)) {

                        }
                        else
                            alert("Phone Number Field is required");
                        break;
                    case "Email":
                        if (!$.jgrid.isEmpty(va)) {

                        }
                        else
                            alert("Email Field is required");
                        break;
                    case "URL":
                        if (!$.jgrid.isEmpty(va)) {
                        }
                        else
                            alert("URL Field is required")
                        break;
                    case "":
                        alert("Fields are not null")
                }
            }
        });

        $('input[value=Edit]').click(function () {
            var ids = $('#list').jqGrid('getDataIDs');
            for (var i = 0; i < ids.length; i++) {
                //$('#list').jqGrid('editRow', ids[i]);
                jQuery('#list').jqGrid('editRow', ids[i], true);
            }
        });
        var data = [{ Mechanism: "Mobile Phone", DataType: "Phone" }, { Mechanism: "Personal Email", DataType: "Email" }, { Mechanism: "Facebook URL", DataType: "URL"}];
        for (var i = 0; i <= data.length; i++)
            jQuery("#list").jqGrid('addRowData', i + 1, data[i]);
        val = i;

【问题讨论】:

    标签: jquery jqgrid


    【解决方案1】:

    如果我理解您的问题,这一切都归结为验证,可以添加添加编辑功能,然后调用自定义验证。

    例如:

    jQuery("#list").navGrid('#pager', {
        add: true,
        addtext: 'Add',
        edit: true,
        edittext: 'Edit',
        del: true,
        deltext: 'Del',
        search: true,
        searchtext: 'Find',
        refresh: true
    }, //options
    {
        reloadAfterSubmit: true,
        beforeSubmit: validate_edit
    }, // edit options
    {
        reloadAfterSubmit: true,
        beforeSubmit: validate_add
    }, // add options
    {}, //del options
    {} //search options
    );
    

    验证(根据您的需要可能不同或相同)

    function validate_add(posdata, obj) {//validation code}
    
    function validate_edit(posdata, obj) {//validation code}
    

    参考: jqgrid different editrules for when adding and editing

    最终,它会真正清理您编写的一堆代码,这些代码试图与网格交互以进行验证。

    【讨论】:

    • 但是我有一个用于添加、编辑的按钮控件,如果我单击编辑按钮,整个网格都需要可编辑。然后,如果我更新每一行的值,我需要根据 DataType 列执行验证。如果您不明白,请告诉我。
    • 您可以调用与按钮处理程序的一部分相同的函数来验证您将要提交到服务器的数据。一次编辑整个网格?我不确定这是否可能,很抱歉我没有从您的问题中得到答案。
    • 另外,您是只是编辑当前在网格中显示的数据,还是编辑网格显示的整个数据集...我很好奇您推动整个网格编辑的要求是什么一次?
    • Ok Mark,主要要求是,我需要根据同一行中先前的单元格值执行单元格验证,无论是一次行编辑还是单元格编辑或整个网格编辑。考虑我的一个行列值 电子邮件,所以我在同一行的另一列(单元格)中输入值意味着,我需要验证 电子邮件格式 ..现在你明白了?请让我知道..感谢您的宝贵建议。
    • 我认为一次编辑一次行的过程(我认为一次编辑整个网格是不可能的,但我不是 100% 确定)将是最好的要走的路。如上所述,作为编辑行的一部分,您可以对任何单元格值执行验证,并使用任何值来验证任何其他值作为自定义验证的一部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多