Events 在本地删除jqgrid后激发事件

Events 在本地删除jqgrid后激发事件,events,jqgrid,local,Events,Jqgrid,Local,所以我要做的是在jqgrid上完成本地删除之后触发一个事件。这是因为我正在处理网站上的全局保存,所以我没有直接发布到服务器。我将JSON格式的数据存储在页面上的一个隐藏元素中,因此当用户最终保存元素值时,元素值将被抓取并与所有其他数据一起发送到服务器 我遇到的问题是,当我从jqgrid中删除一行时,我无法用更改来更新隐藏元素,因此如果用户在此之后保存,就好像从未发生过删除一样 $("#translationMappingGrid").jqGrid({ data: mydata

所以我要做的是在jqgrid上完成本地删除之后触发一个事件。这是因为我正在处理网站上的全局保存,所以我没有直接发布到服务器。我将JSON格式的数据存储在页面上的一个隐藏元素中,因此当用户最终保存元素值时,元素值将被抓取并与所有其他数据一起发送到服务器

我遇到的问题是,当我从jqgrid中删除一行时,我无法用更改来更新隐藏元素,因此如果用户在此之后保存,就好像从未发生过删除一样

      $("#translationMappingGrid").jqGrid({
    data: mydata, 
    datatype: "local", 
    mtype: 'GET',
    colNames:['From','To', 'Type'],
    colModel :[ 
        {name:'from',index:'from', width:180, align:"left",sorttype:"float", editable: true, editrules:{custom:true, custom_func:validateIPGridInput}}, 
        {name:'to',index:'to', width:180, align:"left",sorttype:"float", editable: true, editrules:{custom:true, custom_func:validateIPGridInput}}, 
        {name:'type',index:'type', width:200,align:"left",sorttype:"float", editable: true, 
            edittype:"select", formatter:'select', editoptions:{
                value:"0:Never Translate;1:Always Translate;2:Only If Source;3:Only If Destination"}
        }, 
    ],
    pager: '#pager',
    rowNum:10,
    rowList:[10,20,30],
    sortname: 'invid',
    sortorder: 'desc',
    viewrecords: true,
    gridview: true,
    caption: 'Mapping',
    editurl: 'probe.sysinfo.ajax',
    url:'clientArray',
    onSelectRow: function(id){ 
            jQuery('#translationMappingGrid').jqGrid('restoreRow',lastsel2); 
            //below are the parameters for edit row, the function is called after a successful edit has been done
            //jQuery("#grid_id").jqGrid('editRow',rowid, keys, oneditfunc, succesfunc, url, extraparam, aftersavefunc,errorfunc, afterrestorefunc);
            jQuery('#translationMappingGrid').jqGrid('editRow',id,true,"","","","",function () {
                setTranslationMappingJSON(getGridDataJSONString(this));
                window.parent.document.getElementById('notificationDiv').style.display= "";
                }); 

            lastsel2=id; 
    },
    afterInsertRow: function(rowid, rowdata, rowelem ){
        //alert("after insert row");
        setTranslationMappingJSON(getGridDataJSONString(this));
        window.parent.document.getElementById('notificationDiv').style.display= "";
    }


  });

  //adds buttons to jqgrid nav bar
  jQuery("#translationMappingGrid").navGrid('#pager',{
        edit:false,add:true,del:true,search:false,refresh:true
        }, {
            closeAfterAdd:true,
            closeAfterEdit: true
        },
        {
            closeAfterAdd:true,
            closeAfterEdit: true,
            afterSubmit: function(response, postdata) {
                alert("after complete row");
                setTranslationMappingJSON(getGridDataJSONString(this));
                window.parent.document.getElementById('notificationDiv').style.display= "";
                return [true,""];
            }
        });
正如上面代码中所指出的,我正在通过afterrestorefunc成功地用添加和编辑(内联)上的更改更新隐藏元素,但这对删除不起作用


我曾尝试在上面的代码中使用afterSubmit,但这也不起作用。我已经为此工作了几天,得出结论,我可能必须为“删除”按钮完全编写自己的自定义代码,但我希望情况并非如此。

OP在编辑中写道:

因此,我似乎盯着这个问题看得太久了,错过了显而易见的……幸运的我。我发现了两件事:

  • 使用afterSubmit是错误的,相反,我应该使用afterComplete

  • 在尝试afterSubmit之前,我已经尝试过使用afterComplete,原因是它不起作用,因为我将它们都放在“添加”参数中,而不是删除参数中。再一次,我觉得这一点非常棒:)

  • 好吧,现在我已经明白了这是拯救我生命的代码片段:

        jQuery("#translationMappingGrid").navGrid('#pager',{
        edit:false,add:true,del:true,search:false,refresh:true
        }, {
            closeAfterAdd:true,
            closeAfterEdit: true
        },
        {
            closeAfterAdd:true,
            closeAfterEdit: true
        },{
            afterComplete:
                function () {
                    //saves the changed JSON string to the hidden element
                    setTranslationMappingJSON(getGridDataJSONString(jQuery('#translationMappingGrid')));
                    window.parent.document.getElementById('notificationDiv').style.display= "";
                }                       
        });
    
    在执行删除并将本地更改保存到“我的隐藏元素”后,将对其进行测试并调用该函数

    对于任何对格式感到好奇的人:

              /* The following is the setup 
            navGrid(<name>, {<buttons, true/false},
            {
            <edit parameters>
            },
            {
            <add parameters>
            },
            {
            <delete parameters>
            }  
          */
    
    /*以下是设置
    
    navGrid(,{当我看到你找到了一个解决方案时,我很兴奋,不幸的是我们的情况有点不同。我退出使用navGrid,但我仍然希望在删除行时引发一些事件(例如,通过“delRowData”,就像我正在使用的那样)。但是很高兴你自己发现了它,非常好的描述!)。注意:这仅适用于表单删除(navgrid对象),不适用于内联删除